自動識別編碼讀取和寫入文件

public class FileTraning {

/**
* 判斷文件的編碼格式
* @param fileName :file
* @return 文件編碼格式
* @throws Exception
*/
public static String codeString(String fileName) throws Exception{
BufferedInputStream bin = new BufferedInputStream(
new FileInputStream(fileName));
int p = (bin.read() << 8) + bin.read();
String code = null;

switch (p) {
case 0xefbb:
code = "UTF-8";
break;
case 0xfffe:
code = "Unicode";
break;
case 0xfeff:
code = "UTF-16BE";
break;
default:
code = "GBK";
}
return code;
}

public static String readFile(String filePathAndName,String code) {
 String fileContent = "";
 try {  
  File f = new File(filePathAndName);
  if(f.isFile()&&f.exists()){
   InputStreamReader read = new InputStreamReader(new FileInputStream(f),code);
   BufferedReader reader=new BufferedReader(read);
   String line;
   while ((line = reader.readLine()) != null) {
    fileContent += line;
   }   
   read.close();
  }
 } catch (Exception e) {
  System.out.println("讀取文件內容操作出錯");
  e.printStackTrace();
 }
 return fileContent;
}

public static void writeFile(String filePathAndName, String fileContent, String code) {
 try {
  File f = new File(filePathAndName);
  if (!f.exists()) {
   f.createNewFile();
  }
  OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(f),code);
  BufferedWriter writer=new BufferedWriter(write);   


  writer.write(fileContent);
  writer.close();
 } catch (Exception e) {
  System.out.println("寫文件內容操作出錯");
  e.printStackTrace();
 }
}

public static void main(String[] args) {
String fileName = "c:/1.txt";
String code = "";
try {
code = codeString(fileName);
System.out.println(code);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(readFile(fileName,code));
writeFile(fileName,"中文測試修改內容",code);
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章