我有一個網絡應用程序,這取決於一些罐子。該罐子位於WEB-INF/lib
文件夾中。在運行時,我需要將jar複製到另一個文件夾,然後解壓縮它。有沒有什麼辦法呢?如何從classpath獲取jar文件?
1
A
回答
1
我不確定在哪種情況下您嘗試這樣做。如果你在Spring應用程序或其他應用程序中,它可能與我在這裏描述的有所不同。
如果你是在一個Servlet的上下文中,你可以只是簡化Java ClassLoader或者更準確地說你的運行時環境的類加載器在你的情況下很可能是一個應用服務器,比如Tomcat或者Glassfish來獲取流閱讀JAR文件,例如
InputStream in = getServletContext().getResourceAsStream("/WEB-INF/lib/yourlib.jar");
您將得到一個可用於讀取文件的InputStream。然後,您可以使用Apache Commons FileUtils將Stream複製到另一個文件。
File outputFile = File.createTempFile("temp-file-name", ".jar");
FileUtils.copyInputStreamToFile(in, outputFile);
在上面的例子中,我把把代碼寫入臨時目錄。我無法回答哪個應用程序服務器實際上允許您寫入任意文件系統位置,哪一個不會。所以我認爲應該在每個環境中寫入臨時目錄。
爲您的最後一步。實際上提取JAR文件我想向你推薦這篇文章,它是如何從Java代碼中提取JAR/ZIP文件的極好解釋。
當然,你將需要適應給出有再次的文件寫入到你在哪裏積極的你其實可以寫一個位置的例子。
1
您可以使用ServletContext.getRealPath()
來獲取真實路徑的虛擬路徑。
例如獲得web應用程序的文件夾WEB-INF/lib
:
File libFolder = new File(ServletContext.getRealPath("/"), "WEB-INF/lib");
爲了得到一個特定的jar文件:
File jarFlie = new File(libFolder, "somejar.jar");
Jar文件是正常的zip文件。您可以像其他zip文件一樣將其解壓縮。有關詳細信息,請參閱ZipFile
和JarFile
。
相關問題
- 1. 如何從classloader獲取classpath?
- 2. eclipse中的Classpath jar文件
- 3. 從JAR中獲取文件
- 4. 如何從.jnlp文件獲取.jar文件?
- 5. 如何從jar文件中獲取Manifest.mf文件內容
- 6. 將Jar文件放入ClassPath中
- 7. Jar文件與-classpath結合JAVA
- 8. 使用.getResource()從.jar獲取文件
- 9. 如何從JAR中提取文件夾
- 10. 如何從.jar文件中提取類?
- 11. Java:如何將jar外的.properties文件包含到classpath中?
- 12. 如何優先考慮eclipse classpath中的jar文件?
- 13. 如何訪問spring-boot jar中的classpath文件?
- 14. 如何在linux中的classpath中添加多個jar文件
- 15. 如何在java中爲外部jar文件設置classpath?
- 16. Spring Classpath:無法讀取JAR內的文件
- 17. 如何_directly_從.JAR子目錄中獲取文件列表 - JAVA
- 18. 如何從jar文件中獲取函數sinatures?
- 19. 如何從jar中獲取資源(文件夾)?
- 20. 如何從jar中的文件獲取URL
- 21. 如何從jar文件獲取方法簽名?
- 22. 如何使用Jenkins從nexus獲取jar文件?
- 23. 您可以從C++ Lib文件中獲取信息,例如如何從Jar文件中獲取信息?
- 24. 從jar加載文件時出現問題(classpath問題)
- 25. 從Python中獲取.bat文件中構建的CLASSPATH
- 26. 從Spring JAR讀取文件
- 27. 如何獲取jar文件中的文件夾路徑?
- 28. 如何獲取JAR文件中目錄下的文件列表
- 29. jar小程序classpath
- 30. 如何將jar放入Eclipse的classpath中?
不是簡單地通過在類路徑中的jar,沒有。你爲什麼想這樣做? – 2014-10-08 14:48:26
添加jar作爲「添加類文件夾」,那麼你不需要明確提取它。 – 2014-10-08 14:48:42