2014-11-05 80 views
0

文件我有一個名爲下載項目包含這樣的文件:尷尬的結果,而讀取包含使用的getResource()的路徑空間在Java

Downloader 
-->src 
    -->Downloader 
     -->DownLoader.java 
     -->AudioLinks 

我已經通過下面的函數試圖從Downloader.java訪問AudioLinks 。

public void readFile() 
{ 
    { 
     File file=new File(this.getClass().getResource("AudioLinks").getFile()); 
     if(file.exists()) 
     { 
      System.out.println(file+" Exists"); 
     } 
     else 
     { 
      System.out.println(file+" Doesn't exist"); 
     } 
    } 
} 

它返回以下:

E:\Project%20Eclipse\Workspace\Downloader\bin\Downloader\AudioLinks Doesn't exist 

但是如果我編輯這樣的功能(替換 「%20」 由「「):

public void readFile() 
{ 
    { 
     File file=new File(this.getClass().getResource("AudioLinks").getFile().replaceAll("%20", " ")); 
     if(file.exists()) 
     { 
      System.out.println(file+" Exists"); 
     } 
     else 
     { 
      System.out.println(file+" Doesn't exist"); 
     } 
    } 
} 

它返回:

E:\Project Eclipse\Workspace\Downloader\bin\Downloader\AudioLinks Exists 

問題是如果我導出我的專業版克到可運行的jar它給兩個例子中「不存在」。任何人都可以解釋這些事件嗎?

+5

不要讀它作爲文件。通過_just_ getResource()'將其作爲URL讀取。通過'getResourceAsStream'去掉File wrapper(或者'InputStream',取決於所需的類型) – 2014-11-05 14:35:08

+0

Jars不包含文件,所以你不能使用'File'。 – 2014-11-05 14:36:34

+1

@ greg-499當然罐子包含文件。嘗試使用歸檔工具打開JAR文件(可能在Windows上以.zip重命名),看看你得到了什麼 – msrd0 2014-11-05 14:45:14

回答

1

peeskillet在他的評論中寫道: 不要讀它作爲一個文件。通過getResource()將其作爲URL讀取。擺脫了文件包的(或通過的getResourceAsStream的一個InputStream,根據所需的類型)

所以,我已經編輯這樣的功能,並沒有發現任何錯誤:

public void readFile() 
{ 
    { 
     BufferedReader reader=new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream("AudioLinks"))); 
     String text; 
     try { 
      while((text=reader.readLine())!=null) 
      { 
       System.out.println(text); 
      } 
      reader.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
}