1.编写一个程序,分别使用字节流和字符流拷贝一个文本文件。
提示:
1)使用FileInputStream、FileOutputStream和FileReader、FileWriter分别进行拷贝
2)使用字节流拷贝时,定义一个1024长度的字节数组作为缓冲区,使用字符流拷贝使用使用BufferedReader和BufferedWriter包装流进行包装
这是开始的文本内容。
import java.io.*;
public class kaobei {
public static void main(String []args) throws Exception{
//字节流拷贝
FileInputStream in = new FileInputStream("D:/first.txt");
FileOutputStream out = new FileOutputStream("D:/second.txt");
int len ;
byte[] a = new byte[1024];
while((len = in.read(a))!= -1) {
out.write(a, 0, len);
}
in.close();
out.close();
//字符流拷贝
//创建一个字符流输入缓冲流对象
BufferedReader br = new BufferedReader(
new FileReader("D:/first.txt"));
//创建一个字符流输出缓冲流对象
BufferedWriter bw = new BufferedWriter(
new FileWriter("D:/second.txt"));
/*
定义变量让文本的内容能够完全输出
循环执行,直到读到最后一行
*/
String line2;
while((line2 = br.readLine())!=null) {
bw.write(line2);
}
br.close();
bw.close();
}
}
这样的拷贝如果在文本中出现汉字,就有可能出现乱码。如下图:
这是Reader 类是 Java 的 I/O 中读字符的父类,而 InputStream 类是读字节的父类,InputStreamReader 类就是关联字节到字符的桥梁,它负责在 I/O 过程中处理读取字节到字符的转换,而具体字节到字符的解码实现它由 StreamDecoder 去实现,在 StreamDecoder 解码过程中必须由用户指定 Charset 编码格式。如果你没有指定 Charset,将使用本地环境中的默认字符集,例如在中文环境中将使用 GBK 编码。
可以改该工程的编码格式,或者更改打开txt文件的格式来消除乱码。也可以直接规定打开的编码格式。
import java.io.*;
public class kaobei {
public static void main(String []args) throws Exception{
//字节流拷贝
FileInputStream in = new FileInputStream("D:/first.txt");
FileOutputStream out = new FileOutputStream("D:/second.txt");
int len ;
byte[] a = new byte[1024];
while((len = in.read(a))!= -1) {
out.write(a, 0, len);
}
in.close();
out.close();
//字符流拷贝
//创建一个字符流输入缓冲流对象
BufferedReader br = new BufferedReader(
new InputStreamReader(new FileInputStream("D:/first.txt"),"GBK"));//规定编码格式,否则会乱码
//创建一个字符流输出缓冲流对象
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream("D:/second.txt"),"GBK"));//同上
/*
定义变量让文本的内容能够完全输出
循环执行,直到读到最后一行
*/
String line2;
while((line2 = br.readLine())!=null) {
bw.write(line2);
}
br.close();
bw.close();
}
}
这样规定后就不会出现乱码,
这是更改后的拷贝内容。