Sunday, September 2, 2007

如何读取JAR包内文件

今天做实验时,想把一个配置文件放进包里,以方便调试,后来发觉要读取包里的资源有点问题,上网搜了搜,的确有介绍,但是嫌麻烦,于是还是把它们分了开来。文章转载如下,以后真正要用到时方便查阅:

回答1:
getClass().getResource("image?or txt?");
用IDE打成JAR包 自动生成MANIFAST文件 就可以调用了.如果LZ把JAR文件解压后,把文件放入再压缩的话 估计有点问题   JAR文件是个压缩文件 读取里面的资源应该没问题的

回答2:
1.  java.util.jar.*
    专门处理jar包相关的
2.如果主程序和文件资源在同一个jar包内
  Class.forName("java.lang.Object ").getResourceAsStream(String)

回答3:
final public class ResourceLoader {
    public static byte[] getResource(String path) {
        JarFile jarFile = new JarFile( URLDecoder.decode(ResourceLoader.class.getProtectionDomain().getCodeSource().getLocation().getFile()));
        JarEntry entry = jarFile.getJarEntry(path);
        byte[] data = new byte[(int)entry.getSize()];
        BufferedInputStream in = new BufferedInputStream( jarFile.getInputStream(entry));
        in.read(data);
        in.close();
        return data;
    }
}

这 样直接用 ResourceLoader.getResource("data/data.dat") 就可以读取 jar 文件中 data 目录下的  data.dat 文件了。这里静态方法 getResource 的 path 参数是相对于 Jar 文件来说的相对路径。

也不知道对不对,总之看起来都有道理,就这样先记着吧。

No comments: