一、FileWriter
小节:
1)FileWriter fw = new FileWriter("a.txt",true);//表示追加写入,默认是false。正常情况:执行多次程序输出会被覆盖。写追加true后会在之前基础上写入。
2)\n可以实现换行,但是windows系统自带的记事本打开并没有换行,这是为什么呢?因为windows识别的换行不是\n,而是\r\n * windows:\r\n * linux:\n * mac:\r
3)
// String(char[] value):把字符数组的数据封装成字符串对象 // String s = new String(arr); // System.out.println(s); System.out.println(new String(arr)); //通过构造方法将字符数组转换为字符串。
4)
1.一次写一个写字符串
package day10_io_fileWrite_Read.write; /* FileWriter: * FileWriter(String fileName):传递一个文件名称 * * 输出流写数据的步骤: * A:创建输出流对象 * B:调用输出流对象的写数据的方法 * C:释放资源 */ import java.io.FileWriter; import java.io.IOException; /* flush():刷新缓冲区。流对象还可以继续使用。 close():先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。 */ public class FileWriterDemo01 { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("d:\\java\\demo\\demo001\\src\\day10_io_fileWrite_Read\\a.txt"); fw.write(97);//二进制转换为字符 fw.write("\r\n你好"); //数据没有直接写到文件,其实是写到了内存缓冲区 fw.flush(); //释放资源 //通知系统释放和该文件相关的资源 fw.close(); } }
输出如下:
2.一次写一个字符数组
package day10_io_fileWrite_Read.write; import java.io.FileWriter; import java.io.IOException; /* * void write(String str):写一个字符串数据 * void write(String str,int index,int len):写一个字符串中的一部分数据 * void write(int ch):写一个字符数据,这里写int类型的好处是既可以写char类型的数据,也可以写char对应的int类型的值。'a',97 * void write(char[] chs):写一个字符数组数据 * void write(char[] chs,int index,int len):写一个字符数组的一部分数据 * * *如何实现数据的换行? * \n可以实现换行,但是windows系统自带的记事本打开并没有换行,这是为什么呢?因为windows识别的换行不是\n,而是\r\n * windows:\r\n * linux:\n * mac:\r * 如何实现数据的追加写入? * FileWriter(String fileName, boolean append) */ public class Fw_array02 { public static void main(String[] args) throws IOException { // FileWriter fw = new FileWriter("a.txt"); //相对路径a.txt存在于程序项目的同级目录下。 FileWriter fw = new FileWriter("a.txt",true);//表示追加写入,默认是false。正常情况:执行多次程序输出会被覆盖。写追加true后会在之前基础上写入。 /* fw.write("hello\r\n"); //从index1开始写到3结束 fw.write("hello",1,3); //换行 fw.write("\r\n"); */ //写字符数组数据 char[] arr = {'a','b','c','d'}; fw.write(arr); fw.write(arr,1,2); fw.close(); } }
输出如下:
二、FileReader
1.一次读取一个字符串
package day10_io_fileWrite_Read.read; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class FileReaderDemo03 { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("b.txt"); /* //第一次读 int ch = fr.read(); System.out.println(ch);//打印的是字符值 System.out.println((char)ch); //第二次读 ch = fr.read(); System.out.println(ch); System.out.println((char)ch);//通过测试,我们知道,如果读取数据的返回值是-1的时候,就说明没有数据了,这也是我们循环的结束条件 */ //用循环来读取数据 int ch1; while((ch1=fr.read())!=-1) { System.out.print((char)ch1); //注意print是不换行,println是换行 } fr.close(); } }
输出如下:
2.一次读取一个数组
package day10_io_fileWrite_Read.read; import java.io.FileReader; import java.io.IOException; /* * 读取数组数据方法 * */ public class Fr_array04 { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("c.txt"); //动态初始化:数据类型[] 数组名 = new 数据类型[数组长度]; char[] arr = new char[5]; //一次读取一个字符数组的数据,返回的是实际读取的字符个数 /* //读取一次 int len = fr.read(arr); System.out.println("len:"+len); // String(char[] value):把字符数组的数据封装成字符串对象 // String s = new String(arr); // System.out.println(s); System.out.println(new String(arr)); //通过构造方法将字符数组转换为字符串。 System.out.println(new String(arr,1,3)); fr.close(); */ //循环读取 FileReader fr1 = new FileReader("c.txt"); char[] arr1 = new char[5]; int len1; while((len1=fr1.read(arr1))!=-1) { System.out.print(new String(arr1)); } fr1.close(); } }
输出如下:
三、copy 用io流实现cp文件
1.一次读写一个字符
package day10_io_fileWrite_Read.copy; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; //一次读写一个字符 //先读再写 public class CopyDemo { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("c.txt"); FileWriter fw = new FileWriter("copy.txt"); // //读写一次 // System.out.println(fr.read()); // fw.write(97); // fw.write(fr.read()); //循环读写 int len; while((len=fr.read())!=-1) { fw.write(len); } fw.flush(); fw.close(); fr.close(); } }
2.一次读写一个数组
package day10_io_fileWrite_Read.copy; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class CopyArrayDemo { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("c.txt"); FileWriter fw = new FileWriter("copy1.txt"); char[] arr = new char[5]; int len; while((len=fr.read(arr))!=-1) { fw.write(arr); } fw.close(); fr.close(); } }