字节流: 可以操作任意类型的文件。(文件的复制,文件的上传,下载)

 字节输出流的抽象父类 OutPutStream

FileOutPutStream

  构造方法                                 path往那个文件中写入

FileOutPutStream(String path)/(File path)/(File path,boolean b)/(String path,boolean b)b如果为true文件续写

成员方法

 write(int b)  写出一个字节数据

write(byte[] arr) 写出字节数据,到达文件会转换成码表对应的数据    grtBytes()将字符串转换为字符数组

write(byte[] arr,int index ,int count) 写出字节数组的一部分数据

close()释放资源    

字节流: 可以操作任意类型的文件。(文件的复制,文件的上传,下载)

 字节输入流的抽象父类 InPutStream

FileInPutStream

  构造方法                                 path输入流对象(必须存在)

FileInPutStream(String path)/(File path)

成员方法

int read()  一次读取一个字节数据

 提高读写速度

int read(byte[] arr) 一次读取多个数据,保存到字节数组,返回的是读取个数,读不到数据返回-1

close()释放资源    

一个汉字在UTF-8占用三个负数字节

BufferedOutPutStream()

字节输出缓冲流

构造方法

BufferedOutPutStream(OutputStream ops)

字节缓冲输入流

BufferedInPutStream

构造方法

BufferedInPutStream(OutputStream ops)

成员方法 ????

字节缓冲流仅仅是提供缓冲区,文件的读写还是得用字节流,节省了硬盘文件到内存,内存到硬盘文件间的时间

缓冲流也可以像字符流一样读取字节数组 增快了内存中的缓冲输入流的数组中字节到缓冲输出流数组的时间

Unicode码表

国际组织ISO之制作定制,是统一的万国码。它不是以计算机二进制进行表示的,一个汉字三个字节。

 UTF-8

GBK是中国的码表,一个汉字用两个字节表示。

getBytes(charsetName )根据指定的字符集编码将String转化为字节数组

                                        UTF-8/gbk

String(byte[] byte,String charsetName )   通过指定的字符集解码指定的字节数组来构造新的String

文件复制FileUtils。copyFile(源文件file对象,目的地file对象)

FileInPutStream 中的avliable()可以返回文件的字节数大小

字符流=字节流+编码表

字符流:只能操作文本文件,单独读,单独写

父类 Writer 字符输出流父类    

FileWriter 文件字符输出流

构造方法:

FileWriter (String path )根据字符串路径获取对象

FileWriter (File path )

FileWriter (String path,boolean b )如果b为true,文件续写

FileWriter (File path,boolean b )如果b为true,文件续写

成员方法

write(int ch)写出一个字符
write(char[] arr)

write(char[] arr,int index,int len)写出字符数组一部分数据

write(String str)

write(String str,int index,int len)

flush()刷新流(把数据落实到文件中,后续可以继续写出)

close()释放资源   刷新,关闭流

BufferedWriter 字符缓冲输出流

构造方法

BufferedWriter(Writer w)

成员方法

和字符输出流一样

特有方法 newline() 输出跨平台的换行,写一行行分隔符,分隔符字符串由系统属性定义

OutPutStreamWriter字符转化输出流

构造方法

OutPutStreamWriter(OutPutStreamWriter os)按照平台默认编码获取对象

OutPutStreamWriter(OutPutStreamWriter os,String charSet)按照指定编码获取对象

成员方法

和字符输出流一样

父类   Reader 字符输入流父类

1FileReader 文件字符输入流            

构造方法:

FileReader (String path )根据字符串路径获取对象

FileReader  (File path )

成员方法

int read()一次读取一个字符
int(char[] arr) 一次读取多个字符(字符数据保存到数组中,返回的是字符个数

close()释放资源   刷新,关闭流

 2 BufferedReader 字符缓冲输入流

 构造方法  BUfferedReader(Reader r)

成员方法

和字符输入流一样

特有方法   String  ReadLine()一次读取一整行,不包括任何行终止符。读不到数据返回null

 

package com.yang.Buffered_redader_writer;

import java.io.*;

public class MyTest {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader=new BufferedReader(new FileReader("day-11-file//a.txt"));
        BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter("day-11-file//b.txt"));
//        bufferedReader.readLine();
//        System.out.println(bufferedReader.readLine());
        char[] arr=new char[3];
        int len;
        while ((len=bufferedReader.read(arr))!=-1){
            bufferedWriter.write(arr,0,len);
            //bufferedWriter.newLine();
        }
        //bufferedWriter.flush();
        bufferedReader.close();
        bufferedWriter.close();
    }
}

  

 bufferedWriter.write(arr,0,len); 后面要用 write(char[],int index,lnt len)这种形式。如果写write(char[])后面会多出一些,因为会有数组遗留

转换流

OutPutStreamWriter字符转化输出流

构造方法

OutPutStreamWriter(FileOutPutStream os)按照平台默认编码获取对象

OutPutStreamWriter(FileOutPutStream os,String charSet)按照指定编码获取对象

成员方法

和字符输出流一样

父类 Reader

InPutStreamWriter字符转化输入流

构造方法

InPutStreamReader(FileInPutStream os)按照平台默认编码获取对象

InPutStreamReader(FileInPutStream os,String charSet)它使用指定的字符集读取字节并将它们解码为字符

成员方法

和字符输入流一样

jdk11之后新出的字符转换

FileReader(fileName,Charset.forName(“gbk”))

序列化流;读写对象 (序列化:将对象写出到文件中)

反序列化:将文件中的对象读取到内存中 

父类字节输出流OUtputStream

ObjectOutputStream 对象输出流

构造方法 

ObjectOutputStream(OutputStream os)

成员方法

writeObject(Oject obt)

父类字节输入流InputStream

ObjectInputStream 对象输入流        object(对象)

构造方法 

ObjectIntputStream(InputStream is)

成员方法

Object  readObject( )

 

所用类实现序列化要实现serializable接口

反序列化ObjectRead()默认Object 赋值你的对象强转

serialVersionUID序列化类后,在修改该类的类信息,反序列化会出错serialVersionUID

发生了改变。

private static final long serialVersionUID=1L;自己定义后修该类信息就不会报错了

 

成员类中的成员变量不想被序列化 在该成员变量加关键字 transient(瞬态关键字)和static位置一样

  反序列化ObjectInputStream对象.readObejct(类对象) 读不到对象返回异常,捕获异常就可以了try/chatch

对象操作流读取多个对象

 

Properties集合

见集合