我有一个文本文件。它有配置信息。此文件应保留在外部,以便随时更改此文件的内容。运行时,应从中读取内容。我正在使用 netbeans,我尝试使用 ClassLoader,在我构建之后,dist 文件夹没有 config_text.txt 文件。有没有办法做到这一点,就像我们在netbeans中添加库文件(jar)一样?
4 回答
你怎么读?如果该文件在您的项目根目录中(例如 build.xml 所在的位置),您可以像访问它一样访问它File f = new File("my file.txt");
- 但 NB 不会将它移动到 do ist 文件夹中。
顺便提一句。building 不会将任何文件添加到 dist 文件夹中,而是将 libs 和您的 jar 添加到 dist 文件夹中。也许您可以尝试更改 ant 脚本。也来看看吧build.xml
。
我经常使用该user.home
属性来创建配置文件。就我而言,我检查该文件是否存在于user.home
目录中。如果没有,那么我从我的应用程序中导出一个副本,或者将默认属性写入文件。您可能想尝试这种方法。使用该user.home
目录也可以使其跨平台保持一致。
如果您将文件添加到 NetBeans 项目目录中的“src”文件夹中,那么它应该自动放置在 dist 文件夹和您构建的任何 jar 中的相同相对位置。无论如何,它对我有用,我正在运行 Windows 7x64 和 NetBeans 7.1.2 例如将文件放在:
*NetBeansProjects\PROJECT_NAME\src\PACKAGE_NAME\config_text.txt
应该自动把文件放在这里:
*\NetBeansProjects\PROJECT_NAME\build\classes\PACKAGE_NAME\config_text.txt
然后,您可以使用 getResource() 方法访问它。
编辑:
可能是您运行“清洁和构建”而不仅仅是“构建”吗?第一个将删除“dist”文件夹中的所有内容并重新生成内容,第二个将重新创建您的 Jar 并将其他文件(例如 config_text.txt)保留在原处。
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ConfigHandler {
private static final String PROPERTIES_FILE = "/home/myConfigFile.properties";
private static final Properties PROPERTIES = new Properties();
static {
loadPropertyFile(PROPERTIES_FILE);
}
private static void loadPropertyFile(final String path) {
InputStream is = null;
try {
is = new FileInputStream(path);
PROPERTIES.load(is);
} catch (IOException e) {
throw new RuntimeException("Failed to load property file", e);
} finally {
if (is != null) {
try {
is.close();
} catch (IOException ex) {
}
}
}
}
public void reLoadPropertyFile() throws IOException {
loadPropertyFile(PROPERTIES_FILE);
}
public static String getProperty(String key) {
return PROPERTIES.getProperty(key);
}
}
要在代码中的任何位置读取配置值:
String somePropertyValue = ConfigHandler.getProperty("someProperty");
要重新加载配置文件:
ConfigHandler.reLoadPropertyFile();