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(); } } }
这样就不会出现乱码问题。