無論是用字節流仍是字符流,均可以輕鬆的進行文件讀取。固然,它們對亂碼問題的處理方式是不一樣的。 java
1. 字節流 linux
/** * @param args */ public static void main(String[] args) { try { InputStream in = new BufferedInputStream(new FileInputStream("D:/temp/a.txt")); int c; StringBuffer sb = new StringBuffer(); while ((c = in.read())>0){ sb.append((char)c); } String response = new String(sb.toString().getBytes("iso-8859-1"), "gb2312"); System.out.print(response); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }處理方法:對讀取到的文件內容進行字符編碼轉換
2. 字符流 數據庫
/** * Read file's content * * @param fileAndPath String the file and path * @return String the file's content */ public static String readFile (String fileAndPath) { String fileContent = ""; File file = new File(fileAndPath); if (file.isFile() && file.exists()) { try { InputStreamReader in = new InputStreamReader(new FileInputStream(file), "gb2312"); BufferedReader bf = new BufferedReader(in); String temp; while ((temp=bf.readLine()) !=null) { fileContent += temp+"\n"; } bf.close(); in.close(); }catch (FileNotFoundException e) { System.out.println("File not found"); e.printStackTrace(); } catch (IOException e) { System.out.println("Something wrong when reading file"); e.printStackTrace(); } } return fileContent; }
處理方法: 讀取文件時,用字符流類InputStreamReader進行編碼轉換 windows
3. Linux 平臺下 app
暫時沒有碰到這樣的問題。可是聽說在Linux平臺下,用字符流讀取會有亂碼問題。 編碼
----------------------------------------------------- spa
項目中要求讀取數據文件經過java程序導入數據庫,數據文件是ANSI編碼格式的,在windows環境中沒有什麼問題,windows會自動將編碼轉換成爲gb2312的,可是在linux平臺上因爲多語言,使用InputStreamReader由字節碼轉換爲字符碼的時候會容易產生沒法正確轉換的亂碼,解決方法爲讀取的時候採用iso-8859-1格式讀取,在程序中再次轉碼。 code
BufferedReader reader = new BufferedReader(new InputStreamReader(
new FileInputStream(filename),"iso-8859-1")); get
String line = reader.readLine(); io
line = new String("iso-8859-1","gb2312");