1

JNLP ファイルのリソース セクションに含まれる JAR ファイルがあります。これには、サブフォルダーに多くの画像が含まれています。

ユーザーは、後でこの JAR ファイルを置き換えて、イメージを追加/削除できる必要があります。

リソースからすべてのファイルを列挙する方法はありますか、ファイル拡張子として .GIF と言うか、「images/*.gif」のようなパターンを指定する方が良いでしょう (したがって、親ディレクトリとして「images」を持つ画像を取得するだけです) )。

もう 1 つのオプションは、ファイル構造を反映するテキスト ファイルを作成することです。このようにして、行ごと、画像ごとに実行できますが、これは 2 つの場所を更新する必要があることを意味し、あまりユーザーフレンドリーではありません。

4

1 に答える 1

2

ええ、jar を取得してディレクトリに移動し、内部のファイルを列挙します。

public String[] getFiles() throws IOException {
   ArrayList<String> list = new ArrayList<String>();
   List<JarEntry> ents = new ArrayList<JarEntry>();
   Enumeration<JarEntry> e = null;

   URL jarp = getLocation();
   if (jarp != null) {
    jar = jarp.getProtocol().equalsIgnoreCase("jar") ? jarp : new URL("jar:" +                                                                                                                                                                                      jarp.toString() + "!/");
    JarFile jarf = null;
    try {
        jarf = AccessController.doPrivileged(
                new PrivilegedExceptionAction<JarFile>() {

                    @Override
                    public JarFile run() throws Exception {
                        JarURLConnection conn = (JarURLConnection) jar.openConnection();
                        conn.setUseCaches(false);
                        return conn.getJarFile();
                    }
                });
    } catch (PrivilegedActionException ex) {
        Logger.getLogger(LicenseLoader.class.getName()).log(Level.SEVERE, null, ex);
    }
    e = jarf.entries();
    while (e.hasMoreElements()) {
        JarEntry je = e.nextElement();
        if (!je.isDirectory()) {
            ents.add(je);
        }
    }
    for (JarEntry ent : ents) {
        if ((ent.getName().startsWith(pathName)) && (ent.getName().endsWith(".gif"))) {
            String name = ent.getName().replace(pathName, "");
            list.add(name);
        }
    }
 }
 return list.toArray(new String[list.size()]);
}
于 2012-11-01T18:49:52.377 に答える