java - Java使用相对路径而不是绝对路径
问题描述
我正在阅读 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
它时,它会打开文件。
我需要添加什么才能使相对路径起作用?
解决方案
Java 做相对路径就好了。那么,很明显,您的 java 进程的“当前工作目录”与您调用nano
.
你可以在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
。
推荐阅读
- sql-server - 当查询包含不同的 order by 和内部联接时,如何避免 Union All 中的 TempTable?
- button - 我如何在标题栏中按下按钮并在 vala 的窗口中执行操作
- sql - 列出特定年龄以上的用户
- c# - 类库中的 GIPO 和事件 ValueChanged
- javascript - (object Object) 在使用 EJS 时作为 JQuery 中的 onclick 函数的输出返回
- docker - 为什么我需要同时为 php 和 nginx 挂载 Docker 卷?以及如何复制生产?
- regex - Perl 匹配字符串的一部分
- c# - Unity 5.6 2D-如何检查2个对撞机是否没有接触任何其他对撞机?
- regex - Vim 函数通过正则表达式从 Git URL 中删除所有者/存储库
- discord.js - 阻止踢或将限制设置为踢 Discord.js