jarファイルの中にあるファイルfilename.txt
が必要です。コードを使って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
は、JDK自体(不要サードパーティ製のlib)に、(jarファイルは、ファイル、more hereを効果的にzip圧縮されている)があります。
また、Oracle Webサイトのthis articleも参照してください。 jarファイルがクラスパスにある場合
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();
}
}
}
:ここでは彼らの最初の例のコードは、(それが不十分なエラーチェックなどを持っているほとんどの例のように、そしてもちろんのない私のコード)のアーカイブからすべてのファイルを解凍し、ですgetClass().getClassLoader().getResourceAsStream(...)
を使用して、そのファイルにアクセスできます。 jarファイルがクラスパスにない場合は、java.util.jar.JarFile
をチェックしてください。
あなたは別のライブラリは必要ありません。デフォルトのzipパッケージはうまくいきます。今、あなたはxxx.txtするパスを知っていることを
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
、
エキスそれによって
次のコマンドが動作するはずjar xf yyy.jar files/xxx.txt
:
jar xf yyy.jar files/xxx.txt
jar uf yyy.jar files/xxx.txt
を使用して、それをバック包装するためのjarファイルの正しいJDKを使用することを確認してくださいあなたがプログラムでそれを取得しますか、またはそれを抽出するだけですか?前者の場合は、クラスパスのyyy.jarかどうか? –