java中文字符读写

时间:2021-06-12 07:46:51
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();
	}
}