Java 无法使用相对路径读取文件
我不知道是什么问题,但我没有收到任何文件异常。路径是正确的,我可以通过cmd访问它Java 无法使用相对路径读取文件,java,io,java-io,Java,Io,Java Io,我不知道是什么问题,但我没有收到任何文件异常。路径是正确的,我可以通过cmd访问它 Path file = Paths.get("../resources/input.txt"); BufferedReader reader = Files.newBufferedReader(file, Charset.defaultCharset()); 只是为了使其正式化: 设想目录结构为:/foo/bar/example/test/file.txt 和一个工作目录/foo
Path file = Paths.get("../resources/input.txt");
BufferedReader reader = Files.newBufferedReader(file, Charset.defaultCharset());
只是为了使其正式化:
设想目录结构为:/foo/bar/example/test/file.txt
和一个工作目录/foo/bar/example/
用户名为bob
。(点)-指当前工作目录(例如本例中的
/foo/bar/example/
)
。。(点-点)-指父目录(如本例中的/foo/bar/
)
~(tilde)[Unix-like-only/shell-only]-指用户的主目录(例如/home/bob/
)
直接启动目录名而不使用前面的斜杠(例如test/file.txt
)与使用单点相当(即路径相对于当前工作目录解析)
使用前面的斜杠(例如,/test/file.txt
)直接启动目录名,现在可以从根目录(或者,对于Windows,从工作目录所在的驱动器)指定绝对路径(在Unix上)
有一种特殊情况存在。(dot)和。。(点-点)引用同一目录,当且仅当当前工作目录位于根目录
/
(“绝对”根目录或chroot目录)。windows中的等效文件位于驱动器根目录下(例如,C:\
)。根据文件名判断,您正在尝试读取资源。资源不是文件。至少在概念上,它是打包在JAR、WAR或EAR文件中的。您应该使用Class.getResource()
和friends。在这种情况下,如果没有,您可能需要getResourceAsStream()
。
也许您可以尝试通过文件检查BufferedReader所采用的路径。ToAbsolutionPath().normalize()
以查看没有冗余元素的结果路径它不应该是1点吗?除非你的意思是,当前目录的父目录?你能包括完全限定路径以及当前工作目录的路径吗?你是一个生命救星。谢谢:)双点将一个文件夹返回到当前目录,其中单点指的是当前工作目录请尝试使用“resources/input.txt”
@Panther垃圾。Java支持操作系统支持的东西;您不能在路径中使用它@哦,忘了那件事。应该注意,这是系统相关的,这描述了Unix文件系统的语义。在Windows上,以/
或“\”开头的路径是相对的,并且是相对于当前驱动器号解析的。@AndrewJanke据我所知,除了我已经解释过的~之外,我提到的所有其他内容都可以在Unix和Windows之间传输,特别是在java(原始问题的上下文)中使用时。只有这些示例特定于Unix文件系统。我添加了一个小的表示来解释Windows和Unix中的“根”处理差异。我认为说以/
(但不是/
)开头的路径在Windows上是绝对的仍然不太正确File.isAbsolute()
将返回false,因此依赖于该值(或依赖于保持不变的cwd)的逻辑可能会有不同的行为。“绝对”路径是完全不依赖于当前工作目录的路径。