【问题标题】:What relative path do I need to use in my Java Project我需要在我的 Java 项目中使用什么相对路径
【发布时间】:2011-04-23 17:22:47
【问题描述】:

我有这样的结构:

源代码 -|com -|公司 -|核心--> JAVA类 -|规则 --> 文本文件

Core 内部是一个 Java 类,它使用:

BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));

但我无法弄清楚要使用什么相对路径。现在我使用:

"..\\..\\..\\..\\rules\\rule1.txt"

我也试过了:

"../../../../rules/rule1.txt"

我哪里做错了?

【问题讨论】:

    标签: java path relative-path


    【解决方案1】:

    执行时的当前目录与当前类所在的包无关,不会改变。

    如果您的文件与应用程序一起分发,请使用 Class.getResourceAsStream()。

    【讨论】:

      【解决方案2】:

      这取决于您从哪里启动,而不是您的 java 类的包结构。正如@EJP 指出的那样,还有其他 API 可以反映您的包结构。

      我过去使用的一个技巧是让一行代码创建一个文件“SomeSillyName.txt”。并查看实际弹出的位置。

      我猜你可能是从 src 启动的,所以一个简单的“rules/rule1.txt”就可以了。

      【讨论】:

        【解决方案3】:

        这样不行。相对路径是相对于当前应用程序的工作目录不是类的目录。如果你想知道你当前的工作目录是什么,请使用System.getProperty("user.dir")

        更好的方法是将规则目录添加到类路径中,然后使用Class#getResourceAsStream()


        另一种方法是以其他方式设置规则目录的路径:如果可行,您可以提供命令行选项或设置一些系统属性(例如java -Drules.path=/path/to/rules ... 并稍后通过System.getProperty("rules.path") 读取)。

        【讨论】:

        • System.getProperty("user.dir") 在我的机器上打印出root directoryeclipse installation,这没用。获得eclipse projectroot directory 会很有帮助。
        • @CodeMed 尝试在运行配置的“参数”选项卡中更改工作目录。
        • +1 谢谢。当我在 Eclipse 中执行 Run As..Run on Server 时,它就可以工作了。但是以后编译应用的时候,工作目录设置会不会迁移到war文件中?
        • @CodeMed 不,您不能依赖 servlet 环境中的当前工作目录。还有其他解决方案,例如使用 servlet 上下文或设置属性。您应该寻找其他问题或自己问一个问题。这个话题有点超出范围了。
        【解决方案4】:

        如果您使用 Eclipse 之类的 IDE,则工作目录默认为项目根文件夹。所以src/rules/rule1.txt 应该可以工作。 (或者我误解了你的文件夹结构。)

        【讨论】:

          猜你喜欢
          • 2021-02-20
          • 2015-06-28
          • 1970-01-01
          • 1970-01-01
          • 2011-04-25
          • 2015-04-30
          • 2021-11-26
          • 2022-01-07
          • 2014-08-24
          相关资源
          最近更新 更多