【问题标题】:Java using relative path instead of absolute pathJava使用相对路径而不是绝对路径
【发布时间】:2020-08-27 14:52:08
【问题描述】:

我正在用 Java 读取文件,当我使用绝对路径时它工作正常。

File myObj = new File("/Users/aaronmk2/Downloads/demo2/SystemDependencies/src/sample_input.txt");

但是,当我尝试使用相对路径时,我得到一个 No such file or directory 错误

File myObj = new File("../sample_input.txt");

当我使用终端并使用nano ../sample_input.txt 时,它会打开文件。

我需要添加什么才能使相对路径起作用?

【问题讨论】:

  • 运行时的cwd 和类路径是什么?你是如何执行程序的?

标签: java relative-path readfile


【解决方案1】:

Java 可以很好地执行相对路径。显然,当您调用 nano 时,您的 java 进程的“当前工作目录”与 cwd 不同。

您可以在 java 中检查 CWD。无论哪种方式都可以:

System.out.println(new File(".").getAbsolutePath());

或:

System.out.println(System.getProperty("user.dir"));

你应该会发现它是不同的。 java 进程的“cwd”是由任何启动的 java 设置的 cwd。如果您从命令行调用 java,它将是您执行此操作时所在的目录。如果您双击一个 jar,它将是 jar 所在的目录。如果您正在创建 Windows 快捷方式,则它是快捷方式中列出的目录。示例:

cd /foo/bar
java -jar /bar/baz/hello.jar

在上面的例子中,cwd 是/foo/bar。不是/bar/baz

【讨论】:

  • 谢谢,我需要在文件名前添加 src/
  • 请注意,这意味着当您构建代码时它不起作用(显然,构建后没有'src')。如果这是只读数据,则应使用 ClassYouAreIn.class.getResourceAsStream("file.txt") 加载文件,将 'file.txt' 放在与 ClassYoUAreIn.class 相同的位置。如果您使用的是 maven,请将文件放在 src/resources 中,就像您的 src 文件在 src/java 中一样。如果使用另一个构建系统,请查看如何完成。这意味着数据也将在 jar 中被读取。如果它是一个可编辑的文件,它不应该和代码一起,它应该在 ~ 例如。
猜你喜欢
  • 2016-11-23
  • 2016-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多