0

「classes」、「resources」などのさまざまなフォルダを持つ「san.jar」という名前のjarファイルがあります。たとえば、「resources / asserts / images」のようなフォルダ構造があり、その下にさまざまな画像があります。 jarファイルはプライベートであり、jarを解凍することは許可されていないため、フォルダー内の画像の名前や画像の数など、それらに関する情報はありません。

目的:jarファイル全体を反復処理せずに、指定されたパスの下にあるすべてのファイルを取得する必要があります。

現在私が行っているのは、すべてのエントリを反復処理することであり、.jpgファイルに出くわすたびに何らかの操作を実行します。ここでは、「リソース/アセット/画像」だけを読むために、jarファイル全体を繰り返し処理しています。

JarFile jarFile = new JarFile("san.jar");  
for(Enumeration em = jarFile.entries(); em.hasMoreElements();) {  
                String s= em.nextElement().toString();  
                if(s.contains("jpg")){  
                   //do something  
                }  
 }  

現在私が行っているのは、すべてのエントリを反復処理することであり、.jpgファイルに出くわすたびに何らかの操作を実行します。ここでは、「リソース/アセット/画像」だけを読むために、jarファイル全体を繰り返し処理しています。

4

3 に答える 3

0

このコードはあなたの目的を果たします

JarFile jarFile = new JarFile("my.jar");

    for(Enumeration<JarEntry> em = jarFile.entries(); em.hasMoreElements();) {  
        String s= em.nextElement().toString();

        if(s.startsWith(("path/to/images/directory/"))){
            ZipEntry entry = jarFile.getEntry(s);

            String fileName = s.substring(s.lastIndexOf("/")+1, s.length());
            if(fileName.endsWith(".jpg")){
                InputStream inStream= jarFile.getInputStream(entry);
                OutputStream out = new FileOutputStream(fileName);
                int c;
                while ((c = inStream.read()) != -1){
                    out.write(c);
                }
                inStream.close();
                out.close();
                System.out.println(2);
            }
        }
    }  
    jarFile.close();
于 2012-03-09T08:09:01.717 に答える
0

これは、正規表現を使用してはるかに簡潔に行うことができます... jpg ファイルの拡張子が大文字の JPG の場合にも機能します。

JarFile jarFile = new JarFile("my.jar");

Pattern pattern = Pattern.compile("resources/assets/images/([^/]+)\\.jpg",
        Pattern.CASE_INSENSITIVE);

for (Enumeration<JarEntry> em = jarFile.entries(); em
        .hasMoreElements();) {
    JarEntry entry = em.nextElement();

    if (pattern.matcher(entry.getName()).find()) {
        BufferedImage image = ImageIO.read(jarFile
                .getInputStream(entry));
        System.out.println(image.getWidth() + " "
                + image.getHeight());

    }
}
jarFile.close();
于 2012-03-09T10:18:26.460 に答える