Java 使用System.getProperty(“user.dir”)时获取FileNotFoundException

Java 使用System.getProperty(“user.dir”)时获取FileNotFoundException,java,Java,我正在尝试访问当前工作目录中的文件 我得到的错误是 [java] java.io.FileNotFoundException: /u/user/Documents/DataComProject1\confA.txt 我想造成这种情况的原因是: bufferedReader = new BufferedReader(new FileReader(System.getProperty("user.dir") + "/" + fileName)); 每当我打印试图与FileReader()一起使

我正在尝试访问当前工作目录中的文件

我得到的错误是

 [java] java.io.FileNotFoundException: /u/user/Documents/DataComProject1\confA.txt
我想造成这种情况的原因是:

bufferedReader = new BufferedReader(new FileReader(System.getProperty("user.dir") + "/" + fileName));
每当我打印试图与FileReader()一起使用的目录时,我都会得到:

我相信这个问题和文本文件名位于不同方向之前的反斜杠有关。查看目录后,我可以看到文件就在那里。

不要编写
“/”
来分隔路径元素,而是使用此命令来获得适合您平台的正确路径分隔符:

File.separator 
不要编写
“/”
来分隔路径元素,而是使用它来获得适合您的平台的正确路径分隔符:

File.separator 

您可以使用路径库,而不是自己创建路径:

Path p = Paths.get(System.getProperty("user.dir"))
                 .resolve(filename);
File f = p.toFile();

您可以使用路径库,而不是自己创建路径:

Path p = Paths.get(System.getProperty("user.dir"))
                 .resolve(filename);
File f = p.toFile();

您的
文件名
似乎包含一个嵌入的反斜杠:它是
文档/DataComProject1\confA.txt
。由于反斜杠是文件名中的有效字符,
DataComProject1\confA.txt
被假定为文件名,而不是目录中的文件名

要修复文件名,必须将嵌入的
\\
更改为正确的分隔符:

fileName = fileName.replace('\\', File.separator);
bufferedReader = new BufferedReader(new FileReader(System.getProperty("user.dir") + "/" + fileName));

在每个系统上使用斜杠
/
作为目录分隔符是正确的,但在这里我使用File.separator,因为不使用硬编码的值会使代码的意图更加清晰。

看起来您的
文件名
包含一个嵌入的反斜杠:它是
文档/DataComProject1\confA.txt
。由于反斜杠是文件名中的有效字符,
DataComProject1\confA.txt
被假定为文件名,而不是目录中的文件名

要修复文件名,必须将嵌入的
\\
更改为正确的分隔符:

fileName = fileName.replace('\\', File.separator);
bufferedReader = new BufferedReader(new FileReader(System.getProperty("user.dir") + "/" + fileName));


在每个系统上使用斜杠
/
作为目录分隔符是正确的,但在这里我使用File.separator,因为不使用硬编码的值会使代码的意图更清晰。

“/”适用于所有平台。“/”适用于所有平台。啊,Java 7的新路径API。好极了!谢谢你的帮助,但这和我的有什么不同?我通过System.getProperty()获取路径,然后在其末尾添加斜杠和文件名。@user2376409不确定是否诚实-我总是依赖JDK处理与环境相关的内容(文件系统、区域设置等),它可以正常工作。它能解决您的问题吗?另外:如果您手动键入整个路径+文件名,它能工作吗?你能提供一个完整的例子来重现这个问题吗(即3行代码,其中一个字符串包含路径(显式地,不使用属性)和导致异常的行?啊,Java 7.SWEET的新路径API!谢谢你的帮助,但是这与我的有什么不同?我通过System.getProperty()获得路径,然后在末尾添加斜杠和文件名。@user2376409不确定是否诚实-我总是依赖JDK处理与环境相关的内容(文件系统、区域设置等),它可以正常工作。它能解决您的问题吗?另外:如果您手动键入整个路径+文件名,它能正常工作吗?您能提供一个完整的例子重现这个问题吗(即3行代码,其中字符串包含路径(显式,不使用属性)导致异常的那一行?文件是否存在?:P尝试显示更完整的堆栈跟踪。这一行缓冲了读卡器文件读卡器,尝试将其拆分为几个变量,并确定是哪个构造函数引发了错误。@Joni我正在使用eclipse,代码在eclipse中工作,并试图在Linux.System.getProperty(“user.dir”)中运行它是/u/user/Documents/DataComProject1,文件名是confA.txt。所以,在编译和运行程序之间的某个时刻,斜杠只是改变了方向?你试过调试吗?调试过程中有什么建议吗?我知道放入程序的路径字符串在语法上是正确的。有没有关于在编译和运行程序后如何改变的想法MPlation?在给出错误的行上放置一个断点。检查将传递给FileReader构造函数的参数值。该文件是否存在?:P尝试显示更完整的堆栈跟踪。该行缓冲了reader file reader,尝试将其拆分为几个变量,并确保哪个构造函数引发错误。@Joni I'm使用代码工作的eclipse,并尝试在Linux.System.getProperty(“user.dir”)中运行它是/u/user/Documents/DataComProject1,文件名是confA.txt。所以,在编译和运行程序之间的某个时刻,斜杠只是改变了方向?你试过调试吗?调试过程中有什么建议吗?我知道放入程序的路径字符串在语法上是正确的。有没有关于在编译和运行程序后如何改变的想法mpilation?在给出错误的行上放置一个断点。检查将传递给FileReader构造函数的参数值。fileName只是一个包含“confA.txt”的字符串。fileName只是一个包含“confA.txt”的字符串。