我需要一個文件filename.txt
這是一個jar文件。我如何使用代碼讀取txt文件的內容?是否有可用於處理* .jar文件的庫?如何從jar中獲取文件?
回答
public class Test {
public static void main(String[] args) {
InputStream stream = Test.class.getResourceAsStream("/test.txt");
Scanner s = new Scanner(stream);
while (s.hasNext()) {
System.out.println(s.next());
}
}
}
該jar需要位於應用程序的類路徑中。
此代碼將搜索所有jar的根目錄下的test.txt文件。
如果您需要指定一個不在類路徑中的jar,那麼其他建議可能更有價值。
如果jar不在類路徑中,則可以創建自定義類加載器,並從中加載資源。 – MeBigFatGuy
是否有用於處理* .jar文件的庫?
是的,有java.util.zip
(jar文件是有效的ZIP文件,more here),在JDK本身(無需第三方LIB)。
另請參閱Oracle網站上的this article,其中提供了示例等。下面是他們的第一個例子的代碼,從歸檔(不是我的代碼,當然最喜歡的例子有誤差不足檢查等)解壓縮所有文件:
import java.io.*;
import java.util.zip.*;
public class UnZip {
final int BUFFER = 2048;
public static void main (String argv[]) {
try {
BufferedOutputStream dest = null;
FileInputStream fis = new FileInputStream(argv[0]);
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry entry;
while((entry = zis.getNextEntry()) != null) {
System.out.println("Extracting: " +entry);
int count;
byte data[] = new byte[BUFFER];
// write the files to the disk
FileOutputStream fos = new FileOutputStream(entry.getName());
dest = new BufferedOutputStream(fos, BUFFER);
while ((count = zis.read(data, 0, BUFFER)) != -1) {
dest.write(data, 0, count);
}
dest.flush();
dest.close();
}
zis.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
如果罐子在classpath ,您可以使用getClass().getClassLoader().getResourceAsStream(...)
訪問文件。如果jar文件不在類路徑中,則檢查出java.util.jar.JarFile
。
你不需要一個單獨的庫。默認的壓縮包可以很好地工作。
private String getFile(File jar, String requestedFile) throws IOException{
ByteArrayOutputStream out = new ByteArrayOutputStream(); //change ouptut stream as required
ZipInputStream in = null;
try {
in = new ZipInputStream(new FileInputStream(jar));
ZipEntry entry;
while((entry = in.getNextEntry())!=null){
if (entry.getName().equals(requestedFile)){
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
}
}
} finally {
if (in!=null){
in.close();
}
out.close();
}
return new String(out.toByteArray());
}
首先檢查其中yyy.jar
是你xxx.txt
位於
jar tf yyy.jar
樣本輸出
META-INF/MANIFEST.MF
images/pic.gif
files/abc.txt
files/xxx.txt
現在你知道xxx.txt路徑,
提取物它由
jar xf yyy.jar files/xxx.txt
下面的命令應該工作:
jar xf yyy.jar files/xxx.txt
確保使用正確的JDK的罐子包裝回用
jar uf yyy.jar files/xxx.txt
- 1. 從JAR中獲取文件
- 2. 如何從.jar文件獲取日誌?
- 3. 如何從classpath獲取jar文件?
- 4. 如何從JAR文件獲取資源
- 5. 如何從ouside jar中讀取jar文件中的文件
- 6. 如何從jar文件中獲取Manifest.mf文件內容
- 7. 如何在Jar文件中獲取Unicode
- 8. 如何從JAR中提取文件夾
- 9. 如何從jar中讀取xml文件
- 10. 如何從.jar文件中提取類?
- 11. Java從jar中獲取打包文件
- 12. 如何從.jnlp文件獲取.jar文件?
- 13. 您可以從C++ Lib文件中獲取信息,例如如何從Jar文件中獲取信息?
- 14. 如何從jar中的文件獲取URL
- 15. 如何從jar文件中獲取函數sinatures?
- 16. 如何_directly_從.JAR子目錄中獲取文件列表 - JAVA
- 17. 如何從jar文件中獲取mp3的類路徑
- 18. 如何從jar中獲取資源(文件夾)?
- 19. 如何獲取jongo的jar lib文件?
- 20. 從.jar文件獲取圖像
- 21. 從Android手機獲取jar文件
- 22. 使用.getResource()從.jar獲取文件
- 23. 如何獲取JAR文件中目錄下的文件列表
- 24. 如何獲取jar文件中的文件夾路徑?
- 25. 如何從Java JAR文件中獲取資源/文件的路徑
- 26. 如何在插件jar中獲取plugin.yml?
- 27. 如何從.jar文件中提取.class文件?
- 28. 如何從jar文件中提取zip文件
- 29. 從我的jar文件中獲取資源文件夾內容?
- 30. 如何從jar文件獲取方法簽名?
你想要得到它編程,還是隻是提取它?如果前者,是類路徑中的yyy.jar還是不? –