2014-05-09 27 views
0

我正在研究一個小程序來查找文本文件中的文本,但根據運行程序的方式我得到了不同的結果。Java中的不同結果Netbeans程序

當從Netbeans運行我的程序時,我得到866個匹配項。

當在dist文件夾.jar文件運行我的程序通過雙擊,我獲得1209場比賽(編號)

看來,當我從NetBeans中運行程序,這不是」 t到達文本文件的末尾。這是預期的嗎?

Text File in question

這裏是我的讀取文件代碼:

@FXML 
public void loadFile(){ 
    //Loading file 
    try{ 
     linelist.clear(); 
     aclist.clear(); 
     reader = new Scanner(new File(filepathinput)); 
     while(reader.hasNext()){ 
      linelist.add(reader.nextLine()); 
     } 
     for(int i = 0; i < linelist.size()-1; i++){ 
      if(linelist.get(i).startsWith("AC#")){ 
       aclist.add(linelist.get(i)); 
      } 
     } 
    } 
    catch(java.io.FileNotFoundException e){ 
     System.out.println(e); 
    } 
    finally{ 
     String accountString = String.valueOf(aclist.size()); 
     account.setText(accountString); 
     reader.close(); 
    } 
} 
+0

更新:ArrayList中的最後一個條目是行AC#799,CBA9001,100%,12,IFR,11:00:00,11:26:55,180,F,9001,KNQX,13:26:00, 14:03:40200,F,9001,MUCL,16:03:00,16:40:40200,F,9001,KNQX,18:40:00,19:06:55200,F,9001,MUVR,.. 。從鏈接的文本文件 – neilnm

回答

3

問題是Java應用程序(即JVM)的默認文件編碼和輸入文件的編碼之間不兼容。

該文件的編碼是「ANSI」,通常映射到Windows機器上的Windows-1252編碼(或其變體)。

從命令提示符運行應用程序時,JVM(隱式掃描程序)將採用Windows-1252的系統默認文件編碼。使用此設置讀取相同的編碼文件不會導致問題。

但是,默認情況下,Netbeans會將項目編碼設置爲utf-8,因此當從Netbeans運行應用程序時,其文件編碼爲utf-8。用此編碼讀取文件導致掃描儀混亂。文字「Caraïbes」的字符「ï」(0xEF)是問題的原因。由於它是BOM(= 0xEF 0xBB 0xBF)序列的特徵之一,所以它以某種方式搞砸了掃描儀。

作爲一種解決方案,
任一指定的掃描儀明確地

reader = new Scanner(file, "windows-1252"); 

的編碼類型或使用記事本或更好的記事本++輸入文件的編碼轉換爲UTF-8,並設置編碼類型爲UTF-8而不使用系統默認值。但是,當考慮不同的操作系統時,在所有地方使用utf-8將是處理多平臺環境的首選方式。因此,第二種方法是去。

0

它也可以取決於filepathinput輸入。當jar和netbeans都可能指向兩個不同的文件時。可能在不同位置使用相同的名稱。你能提供關於filepathinput變量值的更多信息嗎?

+0

filepathinput變量是文件,用戶在瀏覽文件時選擇的文件的路徑。由於我現在正在測試程序,因此我總是選擇與我的問題中鏈接的相同的文本文件。 – neilnm

+0

那麼,這是一個JFileChooser的輸出? –

+0

是的,這是它的代碼:@FXML public void chooseFile(){ fchooser.setTitle(「Choose Flight Plan」); 文件selectedfile = fchooser。showOpenDialog(NULL); fppath.setText(selectedfile.getAbsolutePath()); filepathinput = fppath.getText(); } – neilnm