字符流COPY文本文件

  1. @Test
  2. public void demo1() throws FileNotFoundException, IOException {
  3. FileReader fr = new FileReader("chinese2.txt");
  4. FileWriter fw = new FileWriter("chinese2_copy.txt");
  5. int c;
  6. while((c = fr.read()) != -1) {
  7. fw.write(c);
  8. }
  9. fr.close();
  10. fw.close(); //Writer类中有一个2k的小缓冲区,会先将内容写到缓冲区里,再写入文件,如果不关流,可能会丢失数据,关流会将缓冲区内容刷新,再关闭
  11. }

字符流也可以拷贝文本文件, 但不推荐使用. 因为读取时会把字节转为字符, 写出时还要把字符转回字节.程序需要读取一段文本, 或者需要写出一段文本的时候可以使用字符流。读取的时候是按照字符的大小读取的,不会出现半个中文,写出的时候可以直接将字符串写出,不用手动将其转换为字节数组。

字符流拷贝非文本文件

以下程序COPY后的jpg格式文件打不开

  1. @Test
  2. public void demo2() throws IOException {
  3. FileReader fr = new FileReader("test.jpg");
  4. FileWriter fw = new FileWriter("test_copy.jpg");//COPY后的图片打不开
  5. int c;
  6. while((c = fr.read()) != -1) {
  7. fw.write(c);
  8. }
  9. fr.close();
  10. fw.close();
  11. }

字符流不可以拷贝非文本的文件
因为在读的时候会将字节转换为字符,在转换过程中,可能找不到对应的字符,就会用?代替,写出的时候会将字符转换成字节写出去
如果是?,直接写出,这样写出之后的文件就乱了,导致文件无法正确打开。

自定义字符数组COPY文件

比不使用字符数组拷贝的方式效率要高

  1. @Test
  2. public void demo3() throws IOException {
  3. FileReader fr = new FileReader("chinese2.txt");
  4. FileWriter fw = new FileWriter("chinese2_copy3.txt");
  5. char[] arr = new char[1024];
  6. int len;
  7. while((len = fr.read(arr)) != -1) { //将文件上的数据读取到字符数组中
  8. fw.write(arr,0,len); //将字符数组中的数据写到文件上
  9. }
  10. fr.close();
  11. fw.close();
  12. }