a.FileOutputStream fis = new FileOutputStream(String pathName)
b.FileOutputStream fis = new FileOutputStream(String pathName,boolean append) [追加写入流的构造,需要把第二个参数设置为true]
c.FileOutputStream fis = new FileOutputStream(File file)
d.FileOutputStream fis = new FileOutputStream(File file,boolean append)[追加写入流的构造,需要把第二个参数设置为true]
a.write(int c) -> 写一个字节的数据到文件中.
b.write(byte[] bys) -> 写一个字节数组的数据到文件中.
c.write(byte[] bys,int off,int len) -> 写一个字节数组的一部分到文件中,从索引off开始写,写len个数据.
d.如果只是单纯的向文件中写入一个字符串 -> write(byte[] bys) write(“字符串”.getBytes());
流使用完之后要释放资源
a.FileInputStream fis = new FileInputStream(String pathName)
b.FileInputStream fis = new FileInputStream(File file)
a.read(); -> 一次读取一个字节的数据,会将读取到的数据封装到返回值int.
b.read(byte[] bys); -> 一次读取一个字节数组的数据,会将读取到的数据封装到字节数组中,返回值表示本次读取到的有效数据的个数..
1.read()和read(byte[] bys)返回的int类型的数据是有区别的.
2.无参read()方法会将读取到的数据封装到int(返回值)中.
3.有参read()方法会将读取到的数据的有效个数封装到int(返回值)中.
a.BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(String pathName/File file))
a.write(int c) -> 写一个字节数据到文件中.
b.write(byte[] bys) -> 写一个字节数组的数据到文件中.
c.write(byte[] bys,int off,int len) -> 写一个字节数组的一部分到文件中.
缓冲字节输出流和字节输出流的使用方式是一样的,但是缓冲字节输出流的效率比字节流要高.
a.BufferedInputStream bis = new BufferedInputStream(new FileInputStream(String pathName/File file));
a.read(); -> 一次读取一个字节的数据,会将读取到的数据封装到返回值int.
b.read(byte[] bys); -> 一次读取一个字节数组的数据,会将读取到的数据封装到字节数组中,返回值表示本次读取到的有效数据的个数.
缓冲字节输入流和字节输如流的使用方式是一样的,但是缓冲字节输入流的效率比字节流要高.
a.OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(String pathName/File file));
b.OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(String pathName/File file),String characterName);
a.write(int c) -> 写一个字符数据到文件中.
b.write(char[] chs) -> 写一个字符数组的数据到文件中.
c.write(char[] chs,int off,int len) -> 写一个字符数组的数据的一部分到文件中.
(重要)
d.write(String str) -> 写一个字符串的数据到文件中.
(重要)
e.write(String str,int off,int len) -> 写一个字符串的一部分到文件中.
1.如果之后没有指定编码的情况(使用默认编码的情况下,要便捷字符流)
2.以后如果要将指定的字节流转换为字符流的话还是要用转换流的.
flush() -> 将缓冲区的数据刷新到文件中.
a.InputStreamReader isr = new InputStreamReader(new FileInputStream(String pathName/File file))
b.InputStreamReader isr = new InputStreamReader(new FileInputStream(String pathName/File file),String characterName)
a.read() -> 一次读取一个字符的数据,会将读取到的数据封装到int返回值中.
b.read(char[] chs) -> 一次读取一个字符数组的数据,会将读取到的数据封装到chs数组中,将读取到的有效数据的长度封装到返回值中.
a.FileWriter fw = new FileWriter(String pathName/File file)
b.FileWriter fw = new FileWriter(String pathName/File file,boolean append)
a.write(int c) -> 写一个字符数据到文件中.
b.write(char[] chs) -> 写一个字符数组的数据到文件中.
c.write(char[] chs,int off,int len) -> 写一个字符数组的数据的一部分到文件中.
(重要)
d.write(String str) -> 写一个字符串的数据到文件中.
(重要)
e.write(String str,int off,int len) -> 写一个字符串的一部分到文件中.
1.如果使用便捷字符输出流的话呢,会使用默认编码,如果要使用指定编码,请使用父类.
2.如果要追加写入,直接给出第二个参数为true.
flush() -> 将缓冲区的数据刷新到文件中.
a.FileReader fr = new FileReader(String pathName/File file)
a.read() -> 一次读取一个字符的数据,会将读取到的数据封装到int返回值中.
b.read(char[] chs) -> 一次读取一个字符数组的数据,会将读取到的数据封装到chs数组中,将读取到的有效数据的长度封装到返回值中.
如果使用便捷字符输入流的话呢,会使用默认编码,如果要使用指定编码,请使用父类.
a.BufferedWriter bw = new BufferedWriter(new FileWriter(String pathName/File file));
a.write(int c) -> 写一个字符数据到文件中.
b.write(char[] chs) -> 写一个字符数组的数据到文件中.
c.write(char[] chs,int off,int len) -> 写一个字符数组的数据的一部分到文件中.
(重要)
d.write(String str) -> 写一个字符串的数据到文件中.
(重要)
e.write(String str,int off,int len) -> 写一个字符串的一部分到文件中.
如果操作的文件是文本文件,那么请使用缓冲字符流.
newLine() -> 会根据当前的系统属性输出一个换行符. flush() -> 将缓冲区的数据刷新到文件中.
a.BufferedReader br = new BufferedReader(new FileReader(String pathName/File file))
a.read() -> 一次读取一个字符的数据,会将读取到的数据封装到int返回值中.
b.read(char[] chs) -> 一次读取一个字符数组的数据,会将读取到的数据封装到chs数组中,将读取到的有效数据的长度封装到返回值中.
c.readLine() -> 读取一行数据,并且返回一个String字符串. 读取到的数据不包含换行符,如果读取到了文件末尾,则返回的String是null.
如果操作的文件是文本文件,那么请使用缓冲字符流.
本质上是一个字节流,可以获取键盘录入的数据.
a.InputStreamReader isr = new InputStreamReader(System.in); 可以将字节流通过转换流转换为一个字符流.
b.BufferedReader br = new BufferedReader(isr); 使用字符缓冲输入流包装了字符流,获得了更强大的功能,readLine();
注:自己封装标准输入流过程比较繁琐,所以Java提供了一个类Scanner.
本质也是一个字节流.
a.println()可以没有参数,如果没有参数的话,表示换行,如果有参数的话,表示将参数打印到控制台,然后换行.
b.print()必须有参数,将参数打印到控制台.
a.PrintStream ps = new PrintStream(String pathName)
b.PrintStream ps = new PrintStream(File file)
a.println/print
字节流是不需要刷新的.
a.PrintWriter pw = new PrintWriter(String pathName/File file)
b.PrintWriter pw = new PrintWriter(new FileWriter(String pathName/File file),true); 在调用println/printf/format这三个方法的时候才自动刷新.
a.println/print
println()实际上包含了三个操作:
1.将数据打印到文件.
2.换行.
3.刷新
1.PrintWrite本身没有自动刷新的功能,都是依靠构造方法传入的字符流才可以自动刷新.
2.想要自动刷新,必须给出第二个参数为true.
a.ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(String pathName/File file));
a.writeObject(Object o); -> 将一个对象序列化到文件中.
1.要序列化的对象所在的类必须实现序列化接口Serializable(标记接口)
2.可以调用多次writeObject()方法将多个对象存储到文件中,不好.但是读取的时候读取到文件末尾的时候会出异常.
3.希望就写一个对象到文件中,如果非要将多个对象写入到文件中,那么可以将多个对象放到集合中,将集合写入到文件中.
4.当一个类实现了序列化接口的时候,[强制]给出一个序列化Id
private static final long serialVersionUID = 1L;
a.ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(String pathName/File file));
a.readObject();
b.调用一次readObject()方法就会读取文件中一个对象.
如果创建了一个反序列化流,指向的文件中并没有任何的序列化数据,那么即便没有调用readObject方法也会出现异常.
呼~终于写完啦 下一篇我们来介绍IO流的具体案例 三连三连 加油加油