为了方便,想将一个程序的类文件和设置文件、结果文件打入一个jar包,可实际运行时发现jar文件不能访问jar包中的文件。
文件结构
./test //包
./set  //设置文件
jar -cvfm **.jar manifest.mf ./test ./set
然后通过相对路径用BufferedReader读取设置文件。实际运行时发现,jar文件只会去找与其同级的set文件夹,而不会去找jar内部的set文件夹。
求教该如何设置,而且为什么jar文件能够读取内部的包和META-INF文件夹,但不能读取内部的set文件夹?

解决方案 »

  1.   

    ./work 存放.class文件
    ./set  存放设置文件
    ./manifest.mf内容:
    Main-Class: wd/MainFrame
    Manifest-Version: 1.0运行命令 jar -cvfm Test.jar manifest.mf ./work ./set 
    要读取./set/1.set文件并打印行数。
    编译后发现在当前位置运行Test.jar能正常读取,但Test.jar移动其他目录中时不能正常读取,即jar读取的不是文件内部的set/1.set,简单代码如下:package work;import java.io.File;
    import java.io.FileReader;
    import java.io.BufferedReader;
    import java.util.ArrayList;
    import java.util.HashSet;public class Test
    {
    public static final File root = new File("./set");
    public static final File wordFile = new File(root, "1.set");
    private static String[] word = load(wordFile);

    public static String[] load(File aim)
    {
    ArrayList<String> result = new ArrayList<String>();
    String temp;
    BufferedReader br = null;
    try
    {
    br = new BufferedReader(new FileReader(aim));
    while((temp = br.readLine()) != null)
    {
    result.add(temp);
    }
    br.close();
    String[] sArray = new String[result.size()];
    sArray = result.toArray(sArray);
    //System.out.println(sArray.length);
    return sArray;
    }
    catch(Exception ex)
    {
    ex.printStackTrace();
    return new String[0];
    }
    }
    }
      

  2.   

    额,manifest文件应该是:
    Main-Class: work/Test
    Manifest-Version: 1.0
      

  3.   

    没看懂,一般用 ClassLoader.getSystemResourceAsStream() 来输入流的