我是maven和java的新手,我导入了maven项目,它有config.properties文件,这个文件包含
PATH_TO_QUERY_FILE=abc.txt
和使用config.properties中的属性的类,如
queryFile = prop.getProperty("PATH_TO_QUERY_FILE");
我应该在config中为此文件添加实际路径,以便在运行时让代码读取它吗?喜欢
PATH_TO_QUERY_FILE=/home/user/workspace/project/abc.txt
是不是?
mvn package
项目我没有在创建的jar文件中找到这些文件时,这是因为我询问的真实路径是什么? 编码员使用了这些陈述
FileInputStream finputstream = new FileInputStream(
"/home/user/workspace/project/config.properties");
prop.load(finputstream);
queryFile = prop.getProperty("PATH_TO_QUERY_FILE");
fos = new FileOutputStream(new File(
prop.getProperty("PATH_TO_OUTPUT_FILE")));
finputstream.close();
答案 0 :(得分:12)
这取决于您计划如何分发您的应用程序。以及你如何阅读文件。基本上有两种选择:从文件读取和从类路径读取。
<强> 1。从文件中读取。
如果您通过将此路径传递给File
构造函数或传递给某个FileStream,则应该知道您的路径将相对于工作文件夹进行解析。工作文件夹基本上是您从中发起java -cp .. some.MainClass
命令的文件夹。在这种情况下,您必须随身份复制config.properties
文件并从相应的目录运行命令。文件配置在某种程度上更灵活,如果您想要更改该配置中的某些值,则无需重建应用程序(或手动重新打包)。如果你真的没有计划在分发后改变价值,那么通常最好把它装在罐子里并作为资源阅读。
<强> 2。从资源中读取。
Java有一种从类路径中读取资源的机制。要做到这一点,首先需要在通常的jar中打包资源,然后再转到classpath。然后,您可以通过获取适当的类加载器引用将它们加载到您的程序中。通常你只需在上下文中使用任何类:
InputStream s = AnyClass.class.getClassLoader().getResourceAsStream("/config.properties");
//or shortcut version
InputStream s = AnyClass.class.getResourceAsStream("/config.properties");
//now can use this input stream as usually, i.e. to load as properties
Properties props = new Properties();
props.load(inputStream);
现在提供有关如何使用maven正确加载此资源的问题。默认情况下,maven将<MODULE_DIR>/src/main/resources
中的所有文件打包到生成的jar中。因此,您只需将abc.txt
放入<MODULE_DIR>/src/main/resources/whatever/abc.txt
并将其加载为...getResourceAsStream("/whaterver/abc.txt")
即可。无论你如何运行你的应用程序,这都可行:从IDE或打包后。无论你做了什么,都要做到这一点。