【问题标题】:Java FileOutputStream: path relative to program folder?Java FileOutputStream:相对于程序文件夹的路径?
【发布时间】:2012-04-28 02:17:04
【问题描述】:

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

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

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

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

请注意,我更喜欢它独立于系统,并且在部署应用程序时仍然可以工作。最终(相对)路径名将存储在 properties 文件中。

抱歉,如果此问题重复,请提供任何帮助。

【问题讨论】:

    标签: java file path fileoutputstream


    【解决方案1】:

    要查找当前工作目录的相对路径,请说new File(".")

    如果你想知道当前工作目录的绝对路径,你可以写new File(".").getAbsolutePath()或者File(".").getAbsoluteFile()`。

    我希望这能回答您的问题。如果我没有正确理解您,我很抱歉。

    【讨论】:

    • 您没有正确理解。他想要的是程序路径,而不是工作目录。
    • 我尝试过使用"." + File.separator + "data" + File.separator + "file.dat" 但它没有用...
    • 好吧,我用一个文件试了一下,我打印了绝对路径,它绝对正确,但它没有工作......它根据需要返回C:\blah\projectName\data\file.dat.. .
    • 使用 File("./filename") 。它涉及到 ../workspace/myWorkingProject/filename
    【解决方案2】:

    如果您部署为 jar,则可以像这样获取当前代码工作的 jar 文件名和路径:

    new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
    

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

    【讨论】:

      【解决方案3】:

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

      操作系统制造商长期以来一直在说不要将文件保存在应用程序目录中。

      请注意,我更喜欢它独立于系统,并且在部署应用程序时仍然可以工作。

      而是将File 放在user.homesub-directory 中。用户主目录应该可以建立一个可以读取或写入的文件对象。它也是一个可跨运行重现且独立于平台的地方。

      【讨论】:

        【解决方案4】:

        给你:

        String path = System.getProperty("user.dir");
        

        【讨论】:

          【解决方案5】:

          要获取文件的绝对路径,请使用 new File().getCanonicalFile()。

          new FileOutputStream(new File(".\\target\\dataset.xml").getCanonicalFile())
          

          【讨论】:

            猜你喜欢
            • 2013-01-11
            • 2013-12-20
            • 2018-01-27
            • 1970-01-01
            • 2019-03-31
            • 1970-01-01
            • 2011-01-24
            • 1970-01-01
            • 2012-01-28
            相关资源
            最近更新 更多