我有一個網絡應用程序,這取決於一些罐子。該罐子位於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. 從classpath中的jar文件裏的文件夾讀取文件
- 2. 如何從classloader獲取classpath?
- 3. 如何將jar文件添加到Classpath?
- 4. 如何從.jar文件獲取日誌?
- 5. 如何從JAR文件獲取資源
- 6. 如何從jar中獲取文件?
- 7. eclipse中的Classpath jar文件
- 8. 從JAR中獲取文件
- 9. 如何從.jnlp文件獲取.jar文件?
- 10. 如何從jar文件中獲取Manifest.mf文件內容
- 11. 如何從ouside jar中讀取jar文件中的文件
- 12. 如何在Jar文件中獲取Unicode
- 13. 如何獲取jongo的jar lib文件?
- 14. Jar文件與-classpath結合JAVA
- 15. 在java classpath中設置lucene jar文件
- 16. 將Jar文件放入ClassPath中
- 17. 如何從JAR中提取文件夾
- 18. 如何從jar中讀取xml文件
- 19. 如何從.jar文件中提取類?
- 20. 從.jar文件獲取圖像
- 21. 從Android手機獲取jar文件
- 22. 使用.getResource()從.jar獲取文件
- 23. Java從jar中獲取打包文件
- 24. 如何優先考慮eclipse classpath中的jar文件?
- 25. BTrace的-classpath參數如何支持許多jar文件?
- 26. Java:如何將jar外的.properties文件包含到classpath中?
- 27. 如何訪問spring-boot jar中的classpath文件?
- 28. 如何在classpath中爲unix添加jar文件夾?
- 29. 如何在linux中的classpath中添加多個jar文件
- 30. 如何在Jenkins的classpath中使用一組jar文件
不是簡單地通過在類路徑中的jar,沒有。你爲什麼想這樣做? – 2014-10-08 14:48:26
添加jar作爲「添加類文件夾」,那麼你不需要明確提取它。 – 2014-10-08 14:48:42