添加到.jar的属性未找到

时间:2012-04-26 15:23:51

标签: java jar

我有一个简单的桌面应用程序。该应用程序有一个名为MyApp.jar的.jar,其他应用程序,在这个jar中有一个带有一个键的属性文件(infor.properties)。应用程序必须生成一个自己的MyApp.jar,其中属性文件的键是inputText中的String,所以我必须更改que属性文件。我的问题是当我生成新的.jar时,这个jar找不到属性文件。我使用它来获取infor.properties的内容:

InputStream in = this.getClass().getClassLoader().getResourceAsStream("infor.properties");
Properties prop = new Properties();
prop.load(in);
in.close();

我使用ZipFile和ZipOutputStream将每个文件复制到新的.jar,并添加一个新文件。新的.jar文件的新结构是正确的,但是当我运行新的jar时,找不到文件infor.properties。有谁知道为什么?

1 个答案:

答案 0 :(得分:1)

这取决于你的文件在jar中的位置,以及如何指定类路径。不幸的是,你没有给我们很多关于你的结构等信息。所以我创建了这个样本,你希望它可以适用于你的项目:

假设您在Test包中有课程testapp(课程的全名在testapp.Test之前):

package testapp;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Test {

    private static final Logger logger = Logger.getLogger(Test.class.getName());

    public static void main(String[] args) {

            Properties properties = new Properties();
            try {
                properties.load(new FileInputStream("testapp/infor.properties"));
                System.out.println("" + properties.getProperty("a"));
            } catch (IOException e) {
                logger.log(Level.SEVERE, "", e);
            }

    }

}

您在某个目录PROJECT_ROOT中。现在在这个目录中你有上面编译的类(在目录testapp中,因为你的全名是testapp.Test)。您的结构如下所示:

PROJECT_ROOT
  testapp
    Test.class
    infor.properties

注意,该类已经编译好了(你可能知道该怎么做?)。当您的工作目录是PROJECT_ROOT时,您可以运行:

 jar -vcf myjar.jar *

将创建一个名为myjar.jar的jar。现在,您可以使用以下命令运行jar文件

java -cp myjar.jar testapp.Test

简单地说(使用-cp myjar.jar)类路径是myjar.jar(对于JVM来说就像jar目录一样)。

正如您在Test.java中看到的那样,您有"testapp/infor.properties"。必须根据使用的类路径指定属性文件的路径。类路径是myjar.jar内容的根。因此,testapp / infor.properties。