【问题标题】:Java File Path Windows/Linux [closed]Java 文件路径 Windows/Linux [关闭]
【发布时间】:2016-08-08 08:43:45
【问题描述】:

为这两个操作系统在 Java 中创建文件路径的最佳解决方案是什么。应用程序将用于此操作系统,我需要创建通用字符串。

例如: 对于 Linux:

public File folderTxt = new File("/home/romankooo/work/txt/");

对于 Windows:

public File folderTxt = new File("C:\\PDFMalwareDataAnalyser\\Txt\\");

或者是为此操作系统生成 2 个 .jar 文件的最佳解决方案。

非常感谢各位。

【问题讨论】:

  • 答案取决于文件夹的用途。创建临时文件?提供配置文件?读写数据文件?存储用户偏好?等等。对于这些目的中的每一个,都有定义明确的跨平台解决方案。

标签: java linux windows sqlite file


【解决方案1】:

试试这行代码,根据返回的字符串可以调整你的代码

System.getproperty("os.name");

【讨论】:

  • 好的,谢谢..在 linux 中运行这个应用程序,在 windows 中我不能更改对文件夹的写入权限
【解决方案2】:

使用System.getProperty("os.name")获取操作系统名,依赖它设置资源路径:

String resourcePath = null; 
switch (System.getProperty("os.name")) {
            case "Linux":  resourcePath = "/home/romankooo/work/txt/";
                     break;
            case "Windows":  resourcePath = "C:\\PDFMalwareDataAnalyser\\Txt\\";
                     break;
}

【讨论】:

  • 不好的方法。正如@microtone 在其他答案中所说,最好在任何地方使用斜线('/')或File.separator
【解决方案3】:

最好的办法是让java为你决定这样

    public File folderTxt = new File(File.separator + "home" + File.separator + "romankooo" + File.separator + "work" + File.separator + "txt" + File.separator);

【讨论】:

  • 如果文件路径在某处可见则很好。如果用户看不到路径,那么更简单的解决方案是在任何地方使用斜杠“/”。
【解决方案4】:

您可以使用斜杠字符作为两个操作系统的文件分隔符,换句话说,您可以使用C:/PDFMalwareDataAnalyser/Txt/ 而不是C:\\PDFMalwareDataAnalyser\\Txt\\,它仍然可以在 Windows 操作系统上工作。

【讨论】:

    【解决方案5】:

    个人觉得你最好把文件夹通过系统属性传入:

    java -Dfolder=C:\PDFMalwareDataAnalyser\Txt\ myapp

    这个你可以这样使用:

    public File folderTxt = new File(System.getProperty("folderTxt"));
    

    或者通过程序参数传递文件夹:

    java myapp C:\PDFMalwareDataAnalyser\Txt\

    然后像这样使用它:

    public File folderTxt = new File(args[1]);
    

    但如果你坚持在你的代码中使用常量,你可以这样使用它:

    public File folderTxt = new File(String.join(File.separator,"C:","PDFMalwareDataAnalyser","Txt"));
    

    或者更新版本是:

    public File folderTxt = new File(Paths.get("C:","PDFMalwareDataAnalyser","Txt").toString());
    

    或者您也可以读取一个属性文件并将路径存储在该文件中。这适用于不同的操作系统,您只需在之前创建属性文件:

    String propertyFileName = String.format("folderSettings-%s.properties", System.getProperty("os.name").replaceAll(" ","_"));
    Properties p = new Properties();
    try (InputStream is = getClass().getResourceAsStream(propertyFileName))
    {
      p.load(is);
      String folderName = p.getProperty("folderName");
      folderTxt = new File(folderName);
    }
    catch (Exception e)
    {
      // log if error occurs...
      e.printStackTrace();
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多