您的位置:首页 > 编程语言 > Java开发

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

2014-07-10 20:59 1081 查看
需求

将"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();
}
}
}


这样就不会出现乱码问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: