【问题标题】:Java relative file pathsJava 相对文件路径
【发布时间】:2012-01-28 03:26:16
【问题描述】:

我遇到了一个 Java 问题:什么是指示相对文件路径的好方法。

让我更具体一点。我想说总是在./configuration/file.txt 中查找配置文件。我遇到的问题是,我的程序只有从文件所在的目录启动才能正常工作。如果我从不同的目录(如./directory/to/my/program/execute.sh)启动它,则它无法正常运行。

但我还需要对这个文件进行更改,资源似乎想要只读...

【问题讨论】:

  • 您的意思是./configuration/file.txt 而不是/configuration/file.txt。第二条路径是绝对的,应该不会造成问题。
  • 感谢成功,纠正了错字
  • 如果您需要修改配置设置的能力,您可以将 real 配置文件的绝对路径放在资源中。

标签: java file


【解决方案1】:

建议(以便应用程序独立于环境特定细节)读取配置信息的方法是将其作为类路径资源而不是文件系统资源来读取。阅读 Smartly load your properties了解更多详情。

阅读Class.getResourceAsStream javadoc 了解如何指定资源路径的语法

关于 SO 的有用帖子:Classpath resource within jar

【讨论】:

    【解决方案2】:

    您需要提供一种定义目录的机制,例如通过环境变量、命令行参数、配置文件、首选项 API 等。

    【讨论】:

      【解决方案3】:

      为确保您的数据始终位于同一位置,您可以使用主目录。使用主目录将使您在不同平台之间保持一定的一致性,并且您的程序可以访问数据而不管它位于哪个目录。

      例如:

      String userHomeDir = System.getProperty("user.home", ".");
      String systemDir = userHomeDir + "/.collection";
      

      然后您可以稍后使用类似的方式检索文件

      String fileLocation = systemDir + "/file.txt";
      

      【讨论】:

        【解决方案4】:

        如果您希望/configuration/file.txt 表示与某事物相关的文件,则必须定义该事物是什么。我们通常将其设为“类路径或当前目录”。不过,您将不得不编写一些代码才能使其正常工作。类似于以下内容(未经测试)。

        public InputStream getResource( String path ) throws IOException {
          // try relative to current directory
          File file = new File( path );
          if ( file.exists() ) {
            return new FileInputStream( file );
          }
          // try the classpath
          return Thread.currentThread().getContextClassLoader().getResourceAsStream( path );
        }
        

        【讨论】:

          猜你喜欢
          • 2013-10-29
          • 2013-09-06
          • 1970-01-01
          • 2018-05-05
          • 2012-06-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-27
          相关资源
          最近更新 更多