IO流想必大家都很熟悉了,本次实现的需求是按行读取文件内容并且按行写入,代码如下:
try {
String encoding="utf-8"; //设定自己需要的字符编码集
File file = new File("c:/text.txt");
if(file.exists() && file.isFile()){
InputStreamReader read = new InputStreamReader(
new FileInputStream(file), encoding);// 考虑到编码格式
//FileReader read = new FileReader(file); //不考虑转码,可使用FileReader;
BufferedReader br = new BufferedReader(read);//使用缓冲流按行读取
String lineText = null;
StringBuffer sb = new StringBuffer();
while((lineText=br.readLine()) !=null){
System.out.println(lineText);
sb.append(lineText+"\n");
}
br.close();
read.close();
FileWriter fw = new FileWriter("c:/t.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write(sb.toString());
bw.close();
fw.close();
}else{
System.out.println("找不到指定的文件");
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
下面是个人对以上代码的理解:
1、为什么用字符流 而不用字节流?
文件读取选择字符流是因为文件是纯文本,使用字符流可以按行读取,操作快,适合阅读。
2、为什么用InputStreamReader 而不用FileReader?
FileReader是InputStreamReader的子类,继承了它的方法,则不同点在于构造函数,
InputStreamReader的构造函数参数为 InputStream 和编码方式,而FileReader的构造函数参数可以file对象和String的path,当需要根据file和paht
读取文件时,选用FileReader。
另记:在使用String类的split()方法时,按“|” 截取字符串的时候,并不能出现正常的结果,原因是“|” 是转义字符,
需加("\\|")。