Java 无法使用相对路径读取文件

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

我不知道是什么问题,但我没有收到任何文件异常。路径是正确的,我可以通过cmd访问它

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)的逻辑可能会有不同的行为。“绝对”路径是完全不依赖于当前工作目录的路径。