簡體   English   中英

帶有getPath的java.nio.file.InvalidPathException

[英]java.nio.file.InvalidPathException with getPath

我正在使用此代碼

 String path =  getClass().getResource("Template.xls").getPath();

當我在我的機器(Windows)上運行它時,一切都很好。 我甚至在get資源部分和get路徑部分上執行了system.out.println,結果如下:

文件:/ C:/Eclipse/Netbeans/SoftwareCom/build/classes/assets/Template.xls

/C:/Eclipse/Netbeans/SoftwareCom/build/classes/assets/Template.xls

但是,我收到一些用戶的以下錯誤報告

java.nio.file.InvalidPathException: Illegal char <:> at index 4:
file:\C:\Software%20Com\SoftwareCom.exe!\assets\Template.xls

我不知道發生了什么事,或者為什么它會對某些人而不是其他人有用

有什么指針嗎?

要正確回答這個問題,了解您想要對路徑信息做什么會很有幫助。 要讀取文件,您不需要路徑。 你可以打電話

getClass().getResourceAsStream("Template.xls")

如果你真的想知道路徑,你應該打電話

URL url = getClass().getResource("Template.xls");
Path dest = Paths.get(url.toURI());

這可能會導致問題,因為您似乎將java文件打包在Windows可執行文件中。 請參閱URL.getFile()中的錯誤

編輯您的評論:

如上所述,您不需要復制源的路徑。 您可以使用

getClass().getResourceAsStream("Template.xls")

獲取文件的內容並將內容寫入您想要寫入的內容。 失敗的原因是第二個示例中的文件包含在可執行文件中:

 file:\C:\Software%20Com\SoftwareCom.exe

從路徑可以看出:

file:\C:\Software%20Com\SoftwareCom.exe!\assets\Template.xls

感嘆號表示資源在該文件中。 它在Netbeans中工作,因為資源沒有打包在jar中,而是文件系統上的單獨文件。 您應該嘗試在您的計算機上運行exe-version。 它很可能也會失敗。 如果您需要更多信息或幫助,請提供完整的代碼。

我遇到了同樣的問題,並通過使用優秀的'File API來解決它

URL url = MyClass.class.getClassLoader().getResource("myScript.sh");
Path scriptPath = new File(url.getPath()).toPath();

它奏效了!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM