Java FileOutputStream:相对于程序文件夹的路径?

时间:2012-04-16 18:17:22

标签: java file path fileoutputstream

找到相对于“已安装”java应用程序的文件夹的路径的最佳方法是什么?

我有一个静态方法的类:public static void saveToFile(String fileName)

当我用绝对路径调用它时,它可以工作,但我真正想要的是运行应用程序的相对路径和文件夹。

我还没有部署我的应用程序,但是现在我想要找到一个相对于(Netbeans)项目根目录的路径,以及一个被调用数据中的文件夹: ProjectName \ data \ file.dat 。我应该使用File课程还是将其变成URI或其他什么?

请注意,我更喜欢它与系统无关,并且在部署应用程序时仍然可以使用。最终(相对)路径名将存储在属性文件中。

很抱歉,如果此问题重复,我们非常感谢您的帮助。

5 个答案:

答案 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());

(来自How to get the path of a running JAR file?

答案 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())