2013-05-01 48 views
1

我在我的eclipse上有一個項目,它的一個方法是從文件夾讀取文件列表。 當我從日食或從導出的jar中運行它時,它的優良性能很好。Netbeans無法讀取mac中的utf8文件名稱

但我有我的NetBeans的這個應用程序的圖形用戶界面的另一個項目,其中包括導出的jar(很好的工作),但是當我運行或從netbeans導出這個項目,它只是不能讀取非英文文件名,轉換的文件名是這樣的

???????? ???? ??? .mp3 

我嘗試添加-J-Dfile.encoding=UTF-8netbeans.conf ,我也試圖選擇在NetBeans項目屬性,但沒有運氣的編碼。

這裏是一些代碼:

public SFile(String path, FileFilter filter) { 
    File f = null; 
    f = new File(path); 
    directory = f.isDirectory(); 
    if (directory) { 
     children = new ArrayList<SFile>(); 
     File[] ki = f.listFiles(filter); // here i see the ???? ????.mp3 
     ArrayList<File> kids = new ArrayList<File>(); 
     Collections.addAll(kids, ki); 
     Collections.sort(kids, comparator); 
     for (File k : kids) { 
      if (k.isDirectory() && k.listFiles(filter).length == 0) { 
       continue; 
      } 
      children.add(new SFile(k.getAbsolutePath(), filter)); 
     } 
    } else { 
     // some more code... 
    } 
} 

濾波代碼:

new FileFilter() { 
    public boolean accept(final File pathname) { 
    try { 
     return pathname.getCanonicalPath().endsWith(".mp3") || pathname.isDirectory(); 
    } catch (final IOException e) { 
    e.printStackTrace(); 
    } 
    return false; 
    } 
}; 

我的項目的依賴關係:

/Users/dima/Dev/RSLib/asm-3.1.jar 
/Users/dima/Dev/RSLib/grizzly-framework-2.2.16.jar 
/Users/dima/Dev/RSLib/grizzly-http-2.2.16.jar 
/Users/dima/Dev/RSLib/grizzly-http-server-2.2.16.jar 
/Users/dima/Dev/RSLib/grizzly-rcm-2.2.16.jar 
/Users/dima/Dev/RSLib/gson-2.2.2.jar 
/Users/dima/Dev/RSLib/javax.servlet-api-3.1-b05.jar 
/Users/dima/Dev/RSLib/jersey-bundle-1.16.jar 
/Users/dima/Dev/RSLib/jersey-core-1.16.jar 
/Users/dima/Dev/RSLib/jersey-grizzly2-1.16.jar 
/Users/dima/Dev/RSLib/jersey-server-1.16.jar 
/Users/dima/Dev/RSLib/jsr311-api-1.1.1.jar 
/Users/dima/Dev/RSLib/log4j-1.2.17.jar 
/Users/dima/Dev/RSLib/jid3lib-0.5.4.jar 
/Users/dima/Dev/RSLib/cling-distribution-2.0-alpha2/cling-mediarenderer-2.0-alpha2-standalone.jar 
/Users/dima/Dev/RSLib/cling-distribution-2.0-alpha2/cling-workbench-2.0-alpha2-standalone.jar 
/Users/dima/Dev/RSLib/cling-distribution-2.0-alpha2/core/seamless-http-1.0-alpha2.jar 
/Users/dima/Dev/RSLib/cling-distribution-2.0-alpha2/core/seamless-util-1.0-alpha2.jar 
/Users/dima/Dev/RSLib/cling-distribution-2.0-alpha2/core/seamless-xml-1.0-alpha2.jar 
/Users/dima/Dev/RSLib/cling-distribution-2.0-alpha2/support/cling-support-2.0-alpha2.jar 
/Users/dima/Dev/RSLib/cling-distribution-2.0-alpha2/core/cling-core-2.0-alpha2.jar 
/Users/dima/Dev/RSLib/MpegAudioSPI1.9.5/mp3spi1.9.5.jar 
/Users/dima/Dev/RSLib/MpegAudioSPI1.9.5/lib/jl1.0.1.jar 
/Users/dima/Dev/RSLib/MpegAudioSPI1.9.5/lib/tritonus_share.jar 
+0

你正在閱讀文件名列表,然後在GUI中顯示它們嗎?如果是這樣,讓我們​​看看顯示代碼。 – Perception 2013-05-03 20:47:21

+0

不,我沒有顯示它們,即時索引所有的文件hashmap與遞增ID,當我停止調試,我看到非英文文件名爲???????。mp3和Java不能讀取它們 – Dima 2013-05-03 21:25:09

+0

「我看到非英文文件名爲???????。mp3「你在哪看到它們?在IDE的某個地方?在手錶上?在輸出窗格中? – Danack 2013-05-04 02:11:08

回答

1

如果你是在Java 7的listFiles報道上破MAC OS X - 請參閱here和鏈接。如果更新無法解決問題,則應考慮moving to nio - 或參閱here
我希望看到你通過的過濾器listFiles(filter);

+0

奇怪的事情,當即時通訊使用像你說的一個主要的方法,它的工作(當前在日食),但即時通訊使用它在我的代碼內,它也返回「??? ????????。mp3」,有什麼想法? – Dima 2013-05-05 06:53:36

+0

順便說一句,我也試過java 1.6也是,同樣的問題 – Dima 2013-05-05 13:08:33

+0

@DimaGoltsman:你用最新的java 1.7來試試嗎?另外,請務必發佈_all修改pathname_的代碼我懷疑你(或你的依賴)正在調用一個String構造函數,默認編碼 – 2013-05-05 13:28:19