找不到属性文件:java.io.FileNotFoundException使用命令行运行java程序

时间:2017-03-12 20:24:24

标签: java command-line classpath javac

我有一个包含多个包和类的java项目。名为Driver.java的主类如下:

package net.librec.tool.driver;
import net.librec.conf.Configuration;
import net.librec.job.RecommenderJob;
import net.librec.math.algorithm.Randoms;

import java.io.FileInputStream;
import java.util.Properties;

/**
 * Created by Himan on 12/5/2016.
 */
public class Driver {

    // Change this to load a different configuration file.
    public static String CONFIG_FILE =
            "conf/NBayes.properties";

    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();

        String confFilePath = CONFIG_FILE;
        Properties prop = new Properties();
        prop.load(new FileInputStream(confFilePath));
        for (String name : prop.stringPropertyNames()) {
            conf.set(name, prop.getProperty(name));
        }

        Randoms.seed(20161205);
        RecommenderJob job = new RecommenderJob(conf);
        job.runJob();
        System.out.print("Finished");
    }
}

如您所见,在本课程中,我阅读了NBayes.properties。以下是我的项目结构的快照:

Project Structure

我创建了一个名为librec.jar的jar文件。但是,当我使用以下命令行运行程序时:

java -jar librec.jar 

我收到以下错误:

java.io.FileNotFoundException: conf/NBayes.properties (No such file or directory)

问题是什么?运行此程序的正确方法是什么?是否需要制作一个jar文件?

1 个答案:

答案 0 :(得分:0)

执行.jar文件时的当前工作目录需要包含conf/目录。

显然它没有。您需要重新组织您的分发,以便它可以。或者,如果属性文件是只读的,则将它们放在 .jar文件中,并通过例如资源访问它们。 Class.getResourceAsStream()