2017-01-15 42 views
4

我正在爲我的模擬器飛行寫一個主程序。我在.txt文件中獲得簡報,並且正試圖用掃描儀讀取文件。 .txt文件包含一個度符號,這會導致掃描程序不讀取整個文件。從掃描儀的.txt文件讀取學號符號

public static String[] ConvertFile(String FileName){ 
    ArrayList<String> FileArray = new ArrayList<String>(); 
    int count = 0; 

    try{ 
     Scanner file = new Scanner(new File ("C:\ <File Location>" + FileName)); 
     while(file.hasNextLine()){ 
      count++; 
      String Line = file.nextLine()); 
      System.out.printf("%3d: %s %n", count, Line); 
      System.out.println(count); 

     } 
    } 
    catch(FileNotFoundException fnfe){ 
     System.out.println("File Not Found."); 
    } 
    return null; 
} 

伊夫放在下面queston(線路23)中的線

COND: 140475 LB // RWY DRY // +14°C Q1021 270/09 // LMT: OBS(B) 

注意,輸出給人的第一16行txt文件的時候有726行。我知道它的度符號,因爲當我編輯txt並刪除度符號時,程序輸出所有行。

+0

因爲它的程度符號崩潰嗎? –

+0

當你到達符號時會發生什麼?它會崩潰嗎,'file.hasNextLine()'開始返回'false'嗎?在閱讀之前是否還有其他學位符號,或者這是否是第一個? –

+0

它不會崩潰它打印txt文件的前16行,但有726行。對不起,我不清楚這一點。我知道這是問題所在,因爲當我編輯txt文件並刪除符號時,掃描儀可以打印所有行。 – TheSpaceWolf

回答

1

這是一個有趣的行爲。我嘗試運行你的例子,我得到了相同的結果,除了我,如果我的文件第5行有一個度符號,程序甚至不想顯示前4行。這背後的確切原因與字符編碼有關,並且與對此有深入瞭解的人找到詳細的解釋會很有趣。

經過一番深入研究後,事實證明,Java的Scanner使用了底層平臺的默認字符集。你可以找到你的默認字符集是通過使用下面的代碼是什麼:

System.out.println(java.nio.charset.Charset.defaultCharset()); 

在我的系統,這是顯示的信息是「UTF-8」。我目前使用Windows 10系統,並且我創建的文本文件具有「ANSI」的默認字符編碼。我建議確保您的Scanner正在使用的字符編碼和文本文件的字符編碼相同。

使用Window的記事本應用程序,我可以將字符編碼從ANSI更改爲UTF-8。只需點擊「文件」,然後「另存爲...」,彈出對話框時,請確保在「編碼」框的底部選擇「UTF-8」。

enter image description here

當我重新運行的例子。該應用程序能夠成功讀取每一行。希望這可以幫助。乾杯。

+0

感謝您的幫助。我將需要記住用UTF-8編碼保存我的txt文件。 – TheSpaceWolf