1.复制文件

思路:

  1. 根据数据源创建字符输入流对象
  2. 根据目的地创建字符输出流对象
  3. 读写数据,复制文件
  4. 释放资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.demo.chars;

import java.io.*;

/**
* @author jingLv
* @date 2020/12/11
*/
public class CopyJavaDemo {
public static void main(String[] args) throws IOException {
// 根据数据源创建字符输入流对象
InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("java-file-class/ConversionStreamDemo.java"));
// 根据目的地创建字符输出流对象
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream("java-file-class/CopyJavaFile.java"));
// 读写数据,复制文件
// 一次读取一个字符数据
// int ch;
// while ((ch = inputStreamReader.read()) != -1) {
// outputStreamWriter.write(ch);
// }

// 一次读写一个字符数组数据
char[] chars = new char[1024];
int len;
while ((len = inputStreamReader.read(chars)) != -1) {
outputStreamWriter.write(chars, 0, len);
}

// 释放资源
inputStreamReader.close();
outputStreamWriter.close();
}
}

2. 复制文件(改进版)

分析:

  1. 转换流的名字比较长,而我们常见的操作都是按照本地默认编码实现的,所以,为了简化书写,转换流提供了对应的子类
  2. FileReader:用于读取字符文件的便捷类
    • FileReader(String fileName)
  3. FileWriter:用于写入字符文件的便捷类
    • FileWriter(String fileName)
  4. 数据源和目的地的分析
    • 数据源:文件–读数据–Reader–InputStreamReader–FileReader
    • 目的地:文件–写数据–Writer–OutputStreamWriter–FileWriter
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.demo.chars;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
* @author jingLv
* @date 2020/12/11
*/
public class CopyJavaDemo02 {
public static void main(String[] args) throws IOException {
// 根据数据源创建字符输入流对象
FileReader fileReader = new FileReader("java-file-class/ConversionStreamDemo.java");
// 根据目的地创建字符输出流对象
FileWriter fileWriter = new FileWriter("java-file-class/CopyJavaFile.java");
// 读写数据,复制文件
// 一次读写一个字符数组数据
char[] chars = new char[1024];
int len;
while ((len = fileReader.read(chars)) != -1) {
fileWriter.write(chars, 0, len);
}

// 释放资源
fileReader.close();
fileWriter.close();
}
}

3.复制文件(字符缓冲流改进版)

思路:

  1. 根据数据源创建字符缓冲输入流对象
  2. 根据目的地创建字符缓冲输出流对象
  3. 读写数据,复制文件
  4. 释放资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.demo.chars;

import java.io.*;

/**
* @author jingLv
* @date 2020/12/14
*/
public class BufferedStreamCopyDemo {

public static void main(String[] args) throws IOException {
// 1.根据数据源创建字符缓冲输入流对象
BufferedReader bufferedReader = new BufferedReader(new FileReader("java-file-class/ConversionStreamDemo.java"));
// 2.根据目的地创建字符缓冲输出流对象
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("java-file-class/CopyJavaFile.java"));
// 3.读写数据,复制文件
// 一次读写一个字符数据
int ch;
while ((ch = bufferedReader.read()) != -1) {
bufferedWriter.write(ch);
}

// 一次读写一个字符数组
char[] chars = new char[1024];
int len;
while ((len = bufferedReader.read(chars)) != -1) {
bufferedWriter.write(new String(chars, 0, len));
}
// 4.释放资源
bufferedReader.close();
bufferedWriter.close();
}

}

4.复制文件(字符缓冲流特有功能改进版)

思路:

  1. 根据数据源创建字符缓冲输入流对象
  2. 根据目的地创建字符缓冲输出流对象
  3. 读写数据,复制文件
    • 使用字符缓冲流特有功能实现
  4. 释放资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.demo.chars;

import java.io.*;

/**
* @author jingLv
* @date 2020/12/14
*/
public class BufferedStreamCopyDemo02 {
public static void main(String[] args) throws IOException {
// 1. 根据数据源创建字符缓冲输入流对象
BufferedReader bufferedReader = new BufferedReader(new FileReader("java-file-class/ConversionStreamDemo.java"));
// 2. 根据目的地创建字符缓冲输出流对象
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("java-file-class/CopyJavaFile.java"));
// 3. 读写数据,复制文件 使用字符缓冲流特有功能实现
String line;
while ((line = bufferedReader.readLine()) != null) {
// 写数据三步骤,如果没有后两行,会把所有内容写到一行中
bufferedWriter.write(line);
bufferedWriter.newLine();
bufferedWriter.flush();
}
// 4. 释放资源
bufferedReader.close();
bufferedWriter.close();
}
}