package qjt.chinesefile;
import java.io.*;
import java.util.*;
/**
* 以行的方式读中文文件内容件,不会乱码
* @author J. Qiu
* @since 2009.07
* */
public class ChineseFileReader {
private boolean isEnd;
private int count;
private StringBuffer line;
private char[] cbuf;
private FileReader fr;
private StringTokenizer depart;
private boolean hasString;
public ChineseFileReader(String file)throws IOException{
File f=new File(file);
init(f);
}
public ChineseFileReader(File file)throws IOException{
init(file);
}
private void init(File f)throws IOException{
isEnd=false;
count=0;
line=new StringBuffer();
cbuf=new char[1024];
hasString=false;
fr=new FileReader(f);
int len;
char[] t;
while((len=fr.read(cbuf,0,cbuf.length))>0){
if (len==cbuf.length)
line.append(String.valueOf(cbuf));
else{
t=new char[len];
System.arraycopy(cbuf,0,t, 0,len);
line.append(String.valueOf(t));
}
}
//System.out.println(String.valueOf(cbuf));
}
public String readLine()throws IOException{
if (isEnd) return null;
if(!hasString){
depart=new StringTokenizer(line.toString(),"\n");
hasString=true;
}
if(count==depart.countTokens()){
isEnd=true;
return null;
}
return depart.nextToken();
}
public void close() throws IOException{
if (fr!=null) fr.close();
}
}
package qjt.chinesefile;
import java.io.*;
/**
* 以行的方式写中文内容到文件,不会乱码
* @author J. Qiu
* @since 2009.07
* */
public class ChineseFileWriter {
private FileWriter f;
private FileOutputStream fos=null;
public ChineseFileWriter(String file)throws IOException{
File f=new File(file);
init(f);
}
public ChineseFileWriter(File file)throws IOException{
init(file);
}
private void init(File f) throws IOException{
fos=new FileOutputStream(f);
}
public void println(String line) throws IOException{
line+='\n';
byte[] str=line.getBytes();
fos.write(str);
}
public void print(String line) throws IOException{
byte[] str=line.getBytes();
fos.write(str);
}
public void close()throws IOException{
if(fos!=null)
fos.close();
}
}