读写文件乱码问题
 问题原因解决总结
 
问题
 
在用Java中读写含中文的文件时,读出或写入的内容经常会出现乱码的问题 
原因
 
系统的编码和程序的编码采用了不同的编码格式 
  windows自身采用的编码格式是gbk. 而gbk和gb2312基本上是一样的编码方式IDEA中Encode默认是utf-8的编码当在windows中创建并写入的文件编码为gbk. 用程序直接去读会以utf-8方式读取,这样就会乱码 为了避免可能的中文乱码问题,最好在文件写入和读出的时候显式指定编码格式 
解决
 
 
 在Java中,使用java.io.FileReader或者java.io.FileWriter来读写文件 
   虽然可以通过java.io.BufferedReader和java.io.BufferedWriter来提高效率但是在FileReader和FileWriter中只能获取编码方式,不能设置编码方式这样导致在FileReader和FileWriter中的编码设置只能服从底层的编码设置,这样就会在读写多种语言编码的文件时出现乱码  
 
采用java.io.FileInputStream或者java.io.InputStreamReader和java.io.FileOutputStream或者java.io.OutputStreamWriter来解决这个问题InputStreamReader和OutputStreamWriter中,可以通过指定编码方式来完成gbk文件的读写 
public class ReadAndWrite {  
    private static void test(){  
        File firstFile 
= new File("D://fileone.txt");  
        File secondFile
=new File("D://filesecond.txt");  
        BufferedReader in 
= null
;  
        BufferedWriter out 
= null
;        
        try {       
            
            in 
= new BufferedReader(new InputStreamReader(new FileInputStream(firstFile
), "gbk"));  
            
            out 
= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(secondFile
), "gbk"));  
            String line 
= "";  
            while((line 
= in
.readLine())!=null
){  
                System
.out
.println(line
);  
                out
.write(line
+"\r\n");  
            }  
        } catch (FileNotFoundException e
) {  
            System
.out
.println("file is not fond");  
        } catch (IOException e
) {  
            System
.out
.println("Read or write Exceptioned");  
        }finally{             
            if(null
!=in
){   
                try {  
                    in
.close();  
                } catch (IOException e
) {  
                    e
.printStackTrace();  
                }}  
            if(null
!=out
){  
                try {  
                    out
.close();  
                } catch (IOException e
) {  
                    e
.printStackTrace();  
                }
           }
     }  
}  
 
总结
 
BufferedWriter最后一定要关闭,否则内容不会被写入到文件中使用readLine() 方法时,换行写出要添加 \r\n