Java底层代码实现单文件读取和写入(解决中文乱码问题)

需求

将"E:/data/车站一次/阿坝藏族羌族自治州.csv"文件中的内容读取,写入到"E:/data//车站一次.csv"。

代码

public class FileOpe {

	public static void main(String[] args) {

		sigle();	

	}

	public static void sigle(){

		BufferedReader bufr = null;

		BufferedWriter bufw = null;

		try {

			FileReader fr = new FileReader( "E:/data/车站一次/阿坝藏族羌族自治州.csv");

			bufr = new BufferedReader(fr);

			FileWriter fw = new FileWriter( "E:/data//车站一次.csv",true);

			bufw = new BufferedWriter(fw);

			String line = null;

			while((line=bufr.readLine())!=null){

				bufw.write(line);

				bufw.newLine();

				bufw.flush();

			}

		} catch (FileNotFoundException e) {

			e.printStackTrace();

		} catch (IOException e) {

			e.printStackTrace();

		} finally{

			try {

				if(bufr!=null)

					bufr.close();

				if(bufw!=null)

					bufw.close();

			} catch (IOException e) {

				e.printStackTrace();

			}

		}

	}

}

但是,这样写程序会出现乱码问题,在用Java程序读写含中文的文件时,经常会出现乱码问题。

这是因为系统的编码和程序的编码采用了不同的编码格式。通常,windows自身擦采用的编码格式是gbk,

而IDE中Encode默认是utf-8的编码,这就是为什么会出现乱码的原因。为了避免可能得中文乱码问题,

最好在文件读取和写入的时候显式指定编码格式。

读文件

public static String readFile(String fileName){   

	String fileContent = null; 

	BufferedReader bufr = null; 	

	try{

		File f = new File(fileName);    

		InputStreamReader read = new InputStreamReader(new FileInputStream(f),"gbk");     

	    	bufr= new BufferedReader(read);     

	    	String line = null;     

	    	while ((line = bufr.readLine()) != null){      

	    		fileContent += line;        

	    	}   

	    } catch (Exception e) 

	    {       

	    	e.printStackTrace();   

	    } finally{

		read.close();

	    }  

	    return fileContent; 

	} 

写文件

public static void writeFile(String fileName, String fileContent){   

	BufferedWriter bufw = null;

	try{    

		File f = new File(fileName);       

		OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(f),"gbk");    

		bufw = new BufferedWriter(write);        

		bufw.write(fileContent);      

	} catch (Exception e) 

	{    

		e.printStackTrace();   

	} finally{

		bufw.close();

	}

}

解决乱码问题后,代码如下

public class FileDemo {

	public static void main(String[] args) {

		BufferedReader bufr = null;

		BufferedWriter bufw = null;

		try {

			FileInputStream in = new FileInputStream("E:/data/车站一次/阿坝藏族羌族自治州.csv");

			InputStreamReader insr = new InputStreamReader(in, "gbk");

			bufr = new BufferedReader(insr);

			FileWriter fw = new FileWriter("E:/data/a.csv", true);

			bufw = new BufferedWriter(fw);

			String line = null;

			while((line=bufr.readLine())!=null){

				bufw.write(line);

				bufw.newLine();

				bufw.flush();

			}

			bufr.close();

			bufw.close();

		} catch (FileNotFoundException e) {

			e.printStackTrace();

		} catch (IOException e) {

			e.printStackTrace();

		} 	

	}

}

这样就不会出现乱码问题。

你可能感兴趣的:(java)