Java IO流

    科技2022-07-12  127

    IO流

    FileWriter写文件

    简单示例

    package top.lovelc.www.IO; import java.io.FileWriter; import java.io.IOException; /** * @author 小聂同学 * @create 2020-10-02-19:08 * 如果希望将数据写入纯文本文件中那么可以使用FileWriter类 * 1.导包 * import java.io.FileWriter * 2.创建、构造方法 * public FileWriter(String fileName):参数字符串就是文件路径名称。 * FileWriter fw = new FileWriter("file01.txt"); * 文件扩展名只能决定用什么软件打开文件,不能决定其内容。 * 3.使用,成员方法 * 写数据:public void write(String str):参数就是需要写到文件中的字符串 * 关闭流:public void close();关闭,释放相关资源。 **/ public class Demo01FileWriter { public static void main(String[] args) throws IOException { //1.创建一个FileWriter对象 FileWriter fw = new FileWriter("1.txt"); //如果文件不存在会自动创建、如果已经存在该文件,会覆盖原写入(相当于替换) //如果希望覆盖写入,希望进行追加,那么要用另外一种重载形式的构造方法; //public FileWriter(String filewriter,boolean append);第二个参数如果是true将会追加写入 //FileWriter fw = new FileWriter("F:\\1.txt",true); //2.调用writer方法,写入数据 String str = "hello 小聂同学!"; fw.write(str); //3.调用close方法,关闭流 fw.close(); } }

    不同系统中的换行符

    windows:\r\nmac:\r或者\nlinux:\n

    FileWriter当中写数据的方法write有5中重载方式

    package top.lovelc.www.IO; import java.io.FileWriter; import java.io.IOException; /** * @author 小聂同学 * @create 2020-10-03-14:41 * <p> * FileWriter当中写数据的方法write有5中重载方式 * <p> * public void write(int ch);参数是单个文字对应的数字(参数ASCII或者Unicode表) * public void write(String str);写一个完整的字符串 * public void write(String str, int offset, int count);写一个字符串当中的一部分 * public void write(char[] array);写一个完整的字符串数组 * public void write(char[] array, int offset, int count);写字符数组当中的一部分 * 注:当将部分字符串或者数组写入文件时,从第offset(从0开始数的)位开始,写入count位 **/ public class Demo02FileWriter { public static void main(String[] args) throws IOException { //创建对象 FileWriter fw = new FileWriter("1.xt"); //用五种方法写入 //方法一 fw.write(65);//A fw.write(66);//B fw.write(67);//C fw.write(48);//a fw.write(97);//0 //=========================== fw.write("\r\n"); //方法二 fw.write("Hello"); String str = "Java"; fw.write(str); //=========================== fw.write("\r\n"); //方法三 fw.write("123456789", 2, 5); //=========================== fw.write("\r\n"); //方法四 char[] array = {'h', 'e', 'l', 'l', 'o', ' ', 'a', 'r', 'r', 'a', 'y'}; fw.write(array); //=========================== fw.write("\r\n"); //方法五 fw.write(array, 3, 5); //关闭连接,释放资源 fw.close(); } }

    FileReader读文件

    package top.lovelc.www.IO.FileReader; import java.io.FileReader; import java.io.IOException; /** * @author 小聂同学 * @create 2020-10-03-15:05 * FieReader用来将文本文件中的内容读取到程序中 * 使用步骤 * 1.导包 * import java.io.FileReader * <p> * 2.创建、构造方法 * public FileReader(String fileName);参数是文件路径命名 * FileReader fr = new FileReader("1.txt"); * <p> * 3.使用 * 读取单个字符:public int read();读取下一个字符,得到ASCII或者Unicode值 * 关闭释放资源:public void close(); * 如果指定的文件不存在,那么会报错:java.io.FileNotFoundException: F\1.txt (系统找不到指定的路径。) * <p> * 使用步骤:创、写、关 **/ public class Demo01FileReader { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("airpm25.txt"); int x; while ((x = fr.read()) != -1) { System.out.print((char) x); } fr.close(); } } package top.lovelc.www.IO.FileReader; import java.io.FileReader; import java.io.IOException; /** * @author 小聂同学 * @create 2020-10-03-15:39 * <p> * 如果读取字符串一个个读取,那么效率很低 * 为了提高效率FileReader提供了另外一种重载形式的read方法; * <p> * public int read(char[] buf);一次读取整个字符串数组的数据 * 参数是字符数组,用来承载读取到的多个字符。 * 返回值代表的是读取到的有效个数 **/ public class Demo02FileReader { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("airpm25.txt"); char[] buf = new char[1024]; int len; String str; while ((len = fr.read(buf)) != -1) {//-1代表没有更多东西 str = new String(buf, 0, len); System.out.print(str); } fr.close(); } }

    BufferedWriter写文件

    package top.lovelc.www.IO.BuffferedWriter; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; /** * @author 小聂同学 * @create 2020-10-03-18:20 * BufferedWriter和FileWriter差不多,也是一种用来写文件的类,属于字符输出流 * 区别在于BufferedWriter肚子里有一个长度为8192的char[]字符数组,当做缓冲流使用。 * 每次在写数据的时候,实际上都是在不断地向缓冲数组当中添加字符。 * 如果缓冲数组已经满了,那么就会等待下一次写入。 * 如果最终关闭了流,数组仍然没满,那么也会将剩余的有效部分写到硬盘文件里。 * 如何使用BufferedWriter? * 1.首先创建一个普通的FileWriter * 2.将这个普通的FileWriter包装成为缓冲的BufferedWriter,用构造方法。 * 3.后面BufferedWriter使用方法和FileWriter操作方法基本一样。 * <p> * 构造方法: * public BufferedWriter(FileWriter fw);参数就是一个普通的FileWriter对象。 **/ public class Demo01BufferedWriter { public static void main(String[] args) throws IOException { //首先创建一个普通的FileWriter FileWriter fw = new FileWriter("1.txt"); //将这个普通的FileWriter对象传递给BufferedWriter的构造方法即可。 BufferedWriter bw = new BufferedWriter(fw); bw.write("hello"); bw.close(); } }

    newLine()自动换行

    package top.lovelc.www.IO.BuffferedWriter; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; /** * @author 小聂同学 * @create 2020-10-03-18:51 * BufferedWriter额外提供了一个换行的方法: * public void newLine();将会自动根据操作系统的不同,选择写入\r\n或\n或\r。 **/ public class Demo02BufferedWriter { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("1.txt"); BufferedWriter bw = new BufferedWriter(fw); bw.write("hello"); bw.newLine();//会根据操作系统自动选择对应的换行符! bw.write("小聂同学!"); bw.close(); } }

    BufferedReader读文件

    package top.lovelc.www.IO.BufferedReader; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; /** * @author 小聂同学 * @create 2020-10-03-19:02 * BufferedReader和FileReader差不多,也是用来读取文件的一种字符输入流。 * 区别在于BufferedReader肚子里有一个8192长度的char[]字符数组,当做缓冲流使用。 * 当读取数字时,一次性从硬盘读取8192个字节,放在数组缓冲区当中。 * 在调用read方法的时候,只是从缓冲区拿出来字符进行使用。 * 如果缓冲区当中的字符被"取空",那么将会自动再次读取最多8192个再放在缓冲区当中。 * <p> * 如何使用BufferedReader? * 1.首先创建一个普通的BufferedReader * 2.将这个普通的FileReader包装成为缓冲的BufferedReader构造方法。 * 3.使用起来和普通的FileReader基本没有区别。 * <p> * 构造方法 * public BufferedReader(FileReader fr);参数就是一个普通的FileReader对象。 **/ public class Demo01BufferedReader { public static void main(String[] args) throws IOException { //创建一个普通的FileReader FileReader fr = new FileReader("1.txt"); //将其包装成为缓冲的BufferedReader BufferedReader br = new BufferedReader(fr); //读取单个字符(其实就是从8192的缓冲区当中取出单个字符) // int ch; // while ((ch = br.read()) != -1) { // System.out.println((char) ch); // } //读取字符数组(其实就是从8192的缓冲区当中取出多个字符) int len; char[] buf = new char[1024]; while ((len = br.read(buf)) != -1) { System.out.println(buf); } br.close(); } }

    readLine()读取一行字符

    package top.lovelc.www.IO.BufferedReader; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; /** * @author 小聂同学 * @create 2020-10-03-21:22 * BufferedReader额外提供一种方法,可以读取一张行字符串。 * <p> * public String readLine();读取一整行字符串,返回值当中不包含换行符。 **/ public class Demo02ReadLine { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("1.txt"); BufferedReader br = new BufferedReader(fr); String str; while ((str = br.readLine()) != null) { System.out.println(str); } br.close(); } }

    练习

    练习一

    package top.lovelc.www.IO.Test; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; /** * @author 小聂同学 * @create 2020-10-03-23:57 * 题目: * 定义一个集合用于存储多个字符串,向其中添加一些字符串。 * 然后将集合的所有字符串内容写到文件中,要求每个字符串独占一行。 * <p> * 步骤: * 1.创建一个集合,那就是创建ArrayList * 2.用来存储多个字符串,那就是泛型<String> * 3.添加字符串到集合中,就是调用方法:add * 4.既然需要写文件,那么就用:FileWriter、BufferedWriter * 5.谁效率更高:BufferedWriter * 6.集合当中的每一个字符串都需要逐一处理:for循环遍历集合。 * 7.在循环中,将字符串写到文件里:调用write方法、 * 8.每个字符串调用一行:调用newLine方法 * 9.最后关闭流 **/ public class Demo01FromListToFile { public static void main(String[] args) throws IOException { ArrayList<String> list = new ArrayList<>(); list.add("hello"); list.add("小聂同学!"); list.add("你好"); list.add("@刘小畅"); list.add("哈哈"); BufferedWriter bw = new BufferedWriter(new FileWriter("练习1.txt")); for (int i = 0; i < list.size(); i++) { bw.write(list.get(i)); bw.newLine(); } bw.close(); } }

    运行结果:

    练习二

    package top.lovelc.www.IO.Test; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; /** * @author 小聂同学 * @create 2020-10-04-0:14 * 题目: * 与上一题相反,将文件中的字符串文本读取到集合当中,并且,每一行文本作为集合中的一个字符串元素。 * <p> * 步骤: * 1.创建一个集合ArrarList<String>用来接收读取的文本 * 2.创建一个BufferedReader对象 * 3.创建一个字符串变量用来接收每一行的字符串 * 4.使用while循环,里面用readLine方法+list.add,遍历出文件中的字符串,并添加到集合里面 * 5.关闭流 * 6.打印集合 **/ public class Demo02FromFileToList { public static void main(String[] args) throws IOException { ArrayList<String> list = new ArrayList<>(); BufferedReader br = new BufferedReader(new FileReader("练习1.txt")); String str; while ((str = br.readLine()) != null) { list.add(str); } br.close(); System.out.println(list); } }

    运行结果

    总结

    1.IO流是用来传输数据的技术,典型应用包括读写文件。

    2.IO流的分类

    字节输入流字节输出流字符输入流:FileReader、BufferedReader字符输出流:FileWriter、BufferedWriter

    3.FileWriter的一般使用步骤:创、写、关

    //创 FileWriter fw = new FileWriter("file01.txt "); //写 fw.write("hello"); //关 fw.close();

    4.FileWriter如何才能追加写入?构造方法第二个参数为true即可。

    5.如何实现换行?

    window:\r\nmac:\r或者\nlinux:\n

    6.五种write方法的重载:

    写字符串的整体写字符串的部分写字符数组的整体写字符数组的部分写单个字符的部分写单个字符对应的数字(参考ASCII码表或者Unicode表)

    7.FileReader一般使用步骤:创、读、关。

    //创 FileReater fr = new FileReader("file01.txt"); //读单个字符: int ch; while((ch = fr.read()) != -1){ //... } //读字符数组 char[] buf = new char[1024]; int len;//有效个数 while((len = fr.read(buf)) != -1){ String str = new String(buf,0,len); }

    8.BufferedXXX和FileXXX有什么区别?BufferedXXX有8192长度的char[]字符数组作为缓冲,所以性能更加高一点。

    9.BufferedWriter有额外的方法:public void newLine(),根据操作系统自动选择换行符。

    10.BuffereReader有额外的方法:public String readLine(),读取一行字符串,不包含换行符。

    11.关于方法的参数和返回值

    任何数据类型(基本类型、数组、字符串、自定义的类)都可以作为参数。任何数据类型(基本类型、数组、字符串、自定义的类)都可以作为返回值。
    Processed: 0.014, SQL: 8