字符流COPY文本文件
@Testpublic void demo1() throws FileNotFoundException, IOException {FileReader fr = new FileReader("chinese2.txt");FileWriter fw = new FileWriter("chinese2_copy.txt");int c;while((c = fr.read()) != -1) {fw.write(c);}fr.close();fw.close(); //Writer类中有一个2k的小缓冲区,会先将内容写到缓冲区里,再写入文件,如果不关流,可能会丢失数据,关流会将缓冲区内容刷新,再关闭}
字符流也可以拷贝文本文件, 但不推荐使用. 因为读取时会把字节转为字符, 写出时还要把字符转回字节.程序需要读取一段文本, 或者需要写出一段文本的时候可以使用字符流。读取的时候是按照字符的大小读取的,不会出现半个中文,写出的时候可以直接将字符串写出,不用手动将其转换为字节数组。
字符流拷贝非文本文件
以下程序COPY后的jpg格式文件打不开
@Testpublic void demo2() throws IOException {FileReader fr = new FileReader("test.jpg");FileWriter fw = new FileWriter("test_copy.jpg");//COPY后的图片打不开int c;while((c = fr.read()) != -1) {fw.write(c);}fr.close();fw.close();}
字符流不可以拷贝非文本的文件
因为在读的时候会将字节转换为字符,在转换过程中,可能找不到对应的字符,就会用?代替,写出的时候会将字符转换成字节写出去
如果是?,直接写出,这样写出之后的文件就乱了,导致文件无法正确打开。
自定义字符数组COPY文件
比不使用字符数组拷贝的方式效率要高
@Testpublic void demo3() throws IOException {FileReader fr = new FileReader("chinese2.txt");FileWriter fw = new FileWriter("chinese2_copy3.txt");char[] arr = new char[1024];int len;while((len = fr.read(arr)) != -1) { //将文件上的数据读取到字符数组中fw.write(arr,0,len); //将字符数组中的数据写到文件上}fr.close();fw.close();}
