2014-09-11 175 views
1

我正在編寫一個程序來讀取文本文件。當我打印讀取值時,值顯示不正確。 文本文件包含以下數據閱讀文本文件時顯示的文本不正確

This is line one 
This is line two 
This is line three 
This is line four 

代碼讀取文本文件如下:

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 

public class SearchFile { 
    public static void main(String[] args) { 

     BufferedReader br = null; 

     try { 

      String sCurrentLine; 

      br = new BufferedReader(new FileReader("C:\\test.txt")); 

      while ((sCurrentLine = br.readLine()) != null) { 
       System.out.println(sCurrentLine); 
      } 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (br != null)br.close(); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 

    } 
} 

輸出如下:

enter image description here

請幫助解決這個問題。爲什麼我將輸出顯示爲垃圾字符?

+0

這些值似乎有一些額外的編碼。你是如何創建該文件的?你如何顯示(通過終端窗口,IDE控制檯???) – MadProgrammer 2014-09-11 04:20:09

+0

文件的編碼是什麼? – 2014-09-11 04:20:15

+0

它對我來說工作正常。我認爲編碼問題 – PSR 2014-09-11 04:21:03

回答

1

這是一個編碼問題,從輸出看,它看起來像文件編碼在一些UTF-16變體。由於FileReader總是使用平臺的默認編碼,試試這個:

new BufferedReader(
    new InputStreamReader(
     new FileInputStream("C:\\IASTATE\\test.txt"), "UTF-16LE")); 
+0

Bingo!這有助於感謝。 – user1579234 2014-09-11 04:33:11

0

這可能不是你的問題的原因,但使用FileReader通常是因爲它總是使用當前平臺的默認編碼是一個壞主意。所以如果你的文件是用不同的編碼創建的,它可能會打印出「垃圾」。您可以嘗試這樣做,而不是:

BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\IASTATE\\test.txt"), StandardCharsets.UTF_8)); 

如果你替換StandardCharsets.UTF_8test.txt文件的編碼。