我需要一个文件filename.txt
,它位于一个jar文件中。如何使用代码读取txt文件的内容?是否有可用于处理* .jar文件的库?
答案 0 :(得分:3)
如果jar在类路径中,您可以使用getClass().getClassLoader().getResourceAsStream(...)
访问其中的文件。如果jar文件不在类路径中,请查看java.util.jar.JarFile
。
答案 1 :(得分:3)
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,那么其他建议可能更值得。
答案 2 :(得分:2)
是否有用于处理* .jar文件的库?
是的,JDK本身有java.util.zip
(jar文件实际上是zip文件,more here)(不需要第三方库)。
另请参阅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();
}
}
}
答案 3 :(得分:1)
您不需要单独的库。默认的zip包就可以了。
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());
}
答案 4 :(得分:1)
以下命令应该有效:
jar xf yyy.jar files/xxx.txt
确保为jar使用正确的JDK,然后使用
将其打包回来 jar uf yyy.jar files/xxx.txt
答案 5 :(得分:0)
使用任何zip实用程序软件打开它。 .jar只是一个.zip文件。
答案 6 :(得分:0)
首先检查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