---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
选择流时的一些判断准则
1.明确源和目的。源:输入流。InputStream, Reader
目的:输出流。OutputStream, Writer
2.操作的数据是否是纯文本。
是:字符流
不是:字节流
3.当体系明确后,再明确要使用哪个具体的对象
通过设备来区分:
源设备:内存、硬盘、键盘
目的设备:内存、硬盘、控制台
4.看是否需要转换字节和字符,或者需要制定字符集
源:InputStreamReader
目标:OutputStreamWriter
5.是否需要提高效率
源:BufferedInputStream,BufferedReader
目标:BufferedOutputStream, BufferedWriter
举例:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
/**
* 需求:将一个文件存为UTF-8的形式,然后读出来在控制台输出
*
* 分析:
* 1.同时具备输入流和输出流
* 2.纯文本,用字符流
* 3.从硬盘的文件到硬盘的文件再到控制台,可用File流和System.out
* 4.因为有字符集的需求,所以用到InputStreamReader和OutputStreamWriter
* 5.可以使用Buffered提高效率
*
*/
public class ParseRequire {
public static void main(String[] args) {
// 因为源文件就是GBK编码的,而FileReader的默认编码也是GBK,所有就没指定字符集了
FileReader fr = null;
BufferedReader br = null;
// 因为被写入的文件原来是GBK,现在要转换为UTF-8,所以需要用OutputStreamWriter来指定字符集
FileOutputStream fos = null;
OutputStreamWriter osw = null;
BufferedWriter bw = null;
// 因为源文件是UTF-8的编码,所以如果需要正确读出来,需要指定字符集
FileInputStream fis1 = null;
InputStreamReader isr1 = null;
BufferedReader br1 = null;
OutputStream os = null;
OutputStreamWriter osw1 = null;//因为System.out是字节流形式,所以转换到字符流更有效
BufferedWriter bw1 = null;
/*
* 将一个文件拷贝成UTF-8的形式
*/
try {
fr = new FileReader("c:\\学习步骤.txt");
br = new BufferedReader(fr);
fos = new FileOutputStream("c:\\学习步骤1.txt");
osw = new OutputStreamWriter(fos, "UTF-8");
bw = new BufferedWriter(osw);
String str = null;
while ((str=br.readLine()) != null) {
bw.write(str);
bw.newLine();
bw.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/*
* 将一个UTF-8的文件读出到控制台
*/
try {
fis1 = new FileInputStream("c:\\学习步骤1.txt");
isr1 = new InputStreamReader(fis1, "UTF-8");
br1 = new BufferedReader(isr1);
os = System.out;
osw1 = new OutputStreamWriter(os);
bw1 = new BufferedWriter(osw1);
String str = null;
while ((str=br1.readLine()) != null) {
bw1.write(str);
bw1.newLine();
bw1.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (br1 != null) {
try {
br1.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bw1 != null) {
try {
bw1.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
note:FileReader和FileWriter的 默认编码为GBK
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net