2014-01-14 78 views
0

未找到文件在編譯成功後部署的JAR文件中訪問File對象中的文件異常。在這種情況下,文件被放置在src的默認文件夾中,並通過src/filename訪問。 txt。即使嘗試了MyClass.class.getResource(「/ file.txt」)。getPath();訪問文件 Dir Structure http://i43.tinypic.com/2dble0k.png部署Jar時出現FILE未發現異常

File filterFile=new File("win.txt"); 
File currentFile=new File("winP.txt"); 

請提供建議,即在哪裏放置文本文件中的NetBeans罐子部署。

+0

如果你不隱藏你的類和包的名字會更容易。 – PeterMmm

回答

0

您需要區分文件和資源。每個文件也是一種資源,但反之亦然。在JAR文件中,您沒有文件,但只有資源。

加載資源也使用類加載器完成。因此,您必須首先檢索類加載器,然後使用它加載資源:

ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
URL resourceUrl = loader.getResource(resourceName); 
try (InputStream in = resourceUrl.openStream()) { 
    // load bytes from the input stream here 
} 
// process the loaded resource bytes here 

現在在哪裏放置文件?您可以將它們放入JAR的根目錄中。在您的項目中,這意味着將資源文件放入文件夾src。或者你將它們放入一個包裝中,讓它們放在需要它的班級旁邊。

如果放入根目錄,則只能通過資源名稱訪問它們。如果放在一個子目錄(一個包)中,您必須在資源名稱前加上該路徑 - 來自根目錄的beginngin。例如:

URL resourceUrl = loader.getResource("my/pkg/win.txt"); 

只是一個方便:如果資源文件被放置在同一個包中的類,正需要這個資源,你也可以使用類本身加載(而不是類加載器):

URL resourceUrl = getClass().getResource("win.txt"); 

注意,在這種情況下,目錄結構被省略。

在你的例子中,你創建了一個文件對象。如果您稍後使用該文件對象創建FileInputStream,則可以使用上面描述的InputStream而不是那個。

+0

謝謝先生。它真的幫助我out.But當我試圖從java執行運行時powershell命令執行電源shell腳本。我得到** powershell -ExecutionPolicy RemoteSigned -noprofile -noninteractive/D:/ Workspaces/Netbeans% 20Projects /項目/ src目錄/ RES/PName.ps1 **。但這是無效的。我想獲得腳本文件的路徑,以便jar可以得到它。 –

+0

對不起,我不明白。通常,您使用「java -jar 」從控制檯運行JAR文件。 – Seelenvirtuose

+0

我正在使用web start從tomcat啓動jar文件。 –