1. 简介
通过按字节的方式读写文件,实际上是比较底层的,并不算方便。实际程序员可能更喜欢指定编码(如UTF-8),并按字符读写。
Java提供了封装好的阅读器、书写器替我们完成了流-字符转换,我们直接可以操作读写字符的函数即可。
2. 示例
工具类
//工具类
package com.maoge.stream;
import java.io.File;
public class StreamUtils {
//用于定义每次读取的长度
public static final int BUFFER_LENGTH=512;
//文件对象
public static File FILE_FOR_READ;
public static File FILE_FOR_WRITE;
static{
FILE_FOR_READ=new File("C:\\test.txt");
FILE_FOR_WRITE=new File("C:\\result.txt");
}
}
阅读器、书写器
package com.maoge.stream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
//阅读器、书写器示例
public class ReaderWriterDemo {
//测试入口
public static void main(String[] args){
//书写器OutputStreamWriter示例
writeText("哈利路亚");
//阅读器InputStreamReader示例
readText();
//可以在InputStreamReader上再串联一个BufferedReader,实现按行读取,这个就非常方便了。
System.out.println("开始按行读取");
readLine();
}
public static void writeText(String text){
OutputStreamWriter out=null;
try {
//OutputStreamWriter是按字符(非字节了)方式写入,同时可以指定编码
out=new OutputStreamWriter(new FileOutputStream(StreamUtils.FILE_FOR_WRITE),"UTF-8");
out.write(text);
out.flush();
} catch (Exception e) {
System.out.println(e.toString());
}finally{
try {
out.close();
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
public static void readText(){
InputStreamReader in=null;
try{
//注意阅读器一次读取一个字符
in=new InputStreamReader(new FileInputStream(StreamUtils.FILE_FOR_READ),"UTF-8");
StringBuilder sb=new StringBuilder();
int readInt;
while((readInt=in.read())!=-1)
sb.append((char)readInt);
System.out.println(sb.toString());
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
in.close();
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
public static void readLine(){
BufferedReader br=null;
try{
br=new BufferedReader(new InputStreamReader(new FileInputStream(StreamUtils.FILE_FOR_READ),"UTF-8"));
String line = null;
while((line = br.readLine())!=null)
{
System.out.println(line);
}
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
br.close();
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
}