我正在使用 Java 中的数据库(编译为 JAR)制作应用程序。为了连接到数据库,用户必须输入数据库的地址。每次您想使用该程序时,记住/键入地址会很痛苦。
因此,我想将地址保存到某个文本文件中……但是在哪里?我希望任何操作系统上的任何人都可以访问此应用程序,并且我不希望将我的 JAR 放在文件夹中。
是否有可能从位于 JAR 本身的文本文件中写入/读取?
我正在使用 Java 中的数据库(编译为 JAR)制作应用程序。为了连接到数据库,用户必须输入数据库的地址。每次您想使用该程序时,记住/键入地址会很痛苦。
因此,我想将地址保存到某个文本文件中……但是在哪里?我希望任何操作系统上的任何人都可以访问此应用程序,并且我不希望将我的 JAR 放在文件夹中。
是否有可能从位于 JAR 本身的文本文件中写入/读取?
就像 Sotirios Delimanolis 所说,您可以创建和保存属性文件。
做起来很简单,请看下面的例子(见原文)
package test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
public class WritePropertiesFile {
public static void main(String[] args) {
try {
Properties properties = new Properties();
properties.setProperty("favoriteAnimal", "marmot");
properties.setProperty("favoriteContinent", "Antarctica");
properties.setProperty("favoritePerson", "Nicole");
File file = new File("test2.properties");
FileOutputStream fileOut = new FileOutputStream(file);
properties.store(fileOut, "Favorite Things");
fileOut.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我不建议您将属性文件保存到 jar 文件中,但是可以这样做。
请按照stackoverflow的答案:如何用Java写入文本文件
这对我有用。我只是将路径System.getProperty("user.home")
用作文件的位置。这是操作系统中立的。
您可以使用 ClassLoader.getResourceAsStream() 在 jar 中的任何位置打开文件
尝试使用Java Preferences API来存储这样的用户数据。
在应用程序文件夹中存储数据会出现问题(例如,用户可能没有权限,应用程序可能已签名等)。您可以将文件存储在用户主目录中,但大多数操作系统都有指定的位置来存储用户数据(例如,Mac 上的“应用程序支持”、Windows 上的 AppData 等)。另外,用户可能不会喜欢你把他们的主目录弄得乱七八糟。您可以创建一个属性文件并自己处理将其存储在适当的位置,但更简单的解决方案是使用 Preferences API,它可以抽象出必须知道在哪里写入文件的痛苦。
这是一个例子:
import java.util.prefs.Preferences;
public class Test {
public static final String DB_PROP = "user.selected.db.address";
public static void main(String[] args) {
Preferences prefs = Preferences.userNodeForPackage(Test.class);
prefs.put(DB_PROP, "foo");
String dbAddress = prefs.get(DB_PROP, null);
System.out.println(dbAddress);
}
}