【问题标题】:Eclipse project can not reference a file using relative pathsEclipse 项目无法使用相对路径引用文件
【发布时间】:2012-02-28 23:00:13
【问题描述】:

我的文件位于 src 目录下。但是,当我尝试使用“src/readme.txt”调用它时,找不到该文件。 事实上,它表明 java 正在寻找“C:\Documents and settings\john\My Documents\Downloads\eclipse-win32\eclipse\coolCarsProject\src\readme.txt”。

我该如何解决这个问题?我不想一直放在绝对路径中。

我是否需要修复类路径、构建路径或更改项目根目录等?从 Eclipse 中的大约 1000 种设置来看,这对于新手来说一点也不明显。

【问题讨论】:

  • 澄清“称呼它”是什么意思。您是否尝试将其作为单元测试中的文件引用?如果是这样,请检查该测试的运行配置、参数选项卡、工作目录设置。这通常包含一个引用${workspace_loc:your-project},这将使相对引用正常工作。
  • “coolCarsProject”+1。 -1 用于运行 Eclipse / 将项目放入“下载”文件夹。
  • 作为一般的建议,以咆哮开始你的问题并不是让人们帮助你的好方法。如果您不知道某些事情,请承认并清楚地陈述您的问题,而不要责怪工具。除此之外,要获得对这个特定问题的有用答案,您应该在尝试访问文件的位置包含代码的 sn-p。

标签: java eclipse file relative-path


【解决方案1】:

首先,您必须决定是要从文件系统加载文件,还是该文件实际上会与您的应用程序代码捆绑在一起。

如果是前者,那么您应该真正考虑在实际部署时如何启动您的应用程序,因为使用相对文件路径意味着程序应该始终从同一位置启动:相对路径是相对于该位置的程序从哪里开始(当前目录)。如果这确实是您想要的,那么在 Eclipse 中编辑您的启动配置,转到 Arguments 选项卡,然后设置您想要的工作目录。但是 src 目录不是您应该放置此文件的位置,因为这会将文件与类一起复制到目标目录,一旦您部署应用程序,它们可能会被放入一个 jar 中。

如果是后者,则不应将文件视为文件,而应将其视为由 ClassLoader 加载的资源,使用 ClassLoader.getResourceAsStream()(或 Class.getResourceAsStream())。阅读这些方法的 javadoc 以了解传递的路径。如果您将文件直接放在 src 下,Eclipse 会将其与您的类一起复制到默认包中的目标目录中。因此,您应该使用SomeClass.class.getResourceAsStream("/readme.txt") 来加载它。

【讨论】:

  • JB 这很有帮助。非常感谢。
【解决方案2】:

使用相对于当前工作目录的路径通常不是一个好主意,因为通常很难确定当前工作目录是什么。在 Eclipse 中,它将是您的项目文件夹(除非您在启动配置中将其设置为不同的目录),在 webapps 中,它将是 webapp 的根目录,在命令行应用程序中,它可以是任何东西。

【讨论】:

  • "在 webapps 中它将是 webapp 的根目录" - 最好检查一下,它也可以赌容器的起始目录。所以总的来说你是对的 - 不要假设任何事情。
【解决方案3】:

试试这个:

String filePath = ".\\userFiles\\data.json";

其中 «.\» 是 Eclipse 项目的根目录,«userFiles» 是 Eclipse 项目中包含用户文件的文件夹。由于我们谈论的是 Windows 操作系统,我们必须使用 «\» 而不是像 Linux 中的 «/»,但 «\» 是保留符号,因此我们必须输入 «\\»(双反斜杠)来获取想要的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2017-03-17
    • 2020-05-18
    相关资源
    最近更新 更多