找到相对于“已安装”java应用程序的文件夹的路径的最佳方法是什么?
我有一个静态方法的类:public static void saveToFile(String fileName)
当我用绝对路径调用它时,它可以工作,但我真正想要的是运行应用程序的相对路径和文件夹。
我还没有部署我的应用程序,但是现在我想要找到一个相对于(Netbeans)项目根目录的路径,以及一个被调用数据中的文件夹: ProjectName \ data \ file.dat 。我应该使用File
课程还是将其变成URI
或其他什么?
请注意,我更喜欢它与系统无关,并且在部署应用程序时仍然可以使用。最终(相对)路径名将存储在属性文件中。
很抱歉,如果此问题重复,我们非常感谢您的帮助。
答案 0 :(得分:3)
找到相对于“已安装”java应用程序的文件夹的路径的最佳方法是什么?
操作系统制造商长期以来一直在说不保存应用程序目录中的文件。而是将File
放在sub-directory
user.home
中。用户主页是可以建立可以读取或写入的文件对象的位置。它也是一个可以在运行中重现并且与平台无关的地方。
请注意,我更喜欢它与系统无关,并且在部署应用程序时仍然可以使用。 ..这是一个简单的Java Swing应用程序..
然后,您应该研究的一个部署选项是Java Web Start。它不仅使最终用户轻松安装(点击链接并确定提示),而且还提供PersistenceService
来存储少量数据。这是一个很小的demo. of the PersistenceService
。
如果用例需要存储大量数据,则持久性服务将不适合数据本身,而是可以将(绝对)路径存储到实际数据存储的任何位置。这样,您可能会有 默认 路径指向user.home
,但如果用户选择其他位置,请使用持久性服务存储该位置。
一款应用。使用JWS启动时默认使用安全沙箱。要写入本地文件系统,需要放宽沙盒。这需要开发人员对应用程序的Jars进行数字签名。 &安培;请求启动文件中的all-permissions
,以及用户在提示时接受签名的代码。
暂且不说。 Sun不久前决定使用保护域来查找缓存Jars的位置存在安全风险。出于这个原因,他们决定返回的信息总是指向服务器,对于applet和& JWS应用程序。或者换句话说,即使应用程序,保护域也不会指向本地文件系统。在本地缓存。
答案 1 :(得分:2)
如果您将其部署为jar,则可以获取当前代码的jar文件名和路径,如下所示:
new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
答案 2 :(得分:1)
要查找当前工作目录的相对路径,请说new File(".")
。
如果你想知道当前工作目录的绝对路径,你可以写new File(".").getAbsolutePath()
或文件(“。”)。getAbsoluteFile()`。
我希望这能回答你的问题。如果我没有正确理解你,我很抱歉。
答案 3 :(得分:1)
你走了:
String path = System.getProperty("user.dir");
答案 4 :(得分:0)
要获取文件的绝对路径,请使用新的File()。getCanonicalFile()。
new FileOutputStream(new File(".\\target\\dataset.xml").getCanonicalFile())