IO异常从文件中读取文本

Num*_*tor 0 java io

我正在尝试从驱动器中的计算机中的文本文件中读取文本 D:

所以,我用Java写道:

public class Test {
    public static void main(String [] args ) throws IOException{
        FileReader in= new FileReader("D:\nir");
        BufferedReader bin= new BufferedReader(in);
        String text = bin.readLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误异常:

Exception in thread "main" java.io.FileNotFoundException: D:ir
  (The filename, directory name, or volume label syntax is incorrect)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileReader.<init>(Unknown Source)
    at A11.main(A11.java:14)
Run Code Online (Sandbox Code Playgroud)

我不明白有什么问题,因为文件存在,名称是正确的,也许我没有使用正确的语法和命令?

Jon*_*eet 6

这就是问题:

new FileReader("D:\nir")
Run Code Online (Sandbox Code Playgroud)

这是"D:"加上换行符+"ir".

我想你的意思

new FileReader("D:\\nir")
Run Code Online (Sandbox Code Playgroud)

基本上反斜杠需要在Java字符串文字中进行转义.有关详细信息,请参阅Java语言规范中的第3.10.6节.

(顺便说一下,我个人不会使用,FileReader因为它总是使用平台默认编码,但这是一个单独的问题.)

编辑:指定任何一种斜杠的替代方法是使用File:

File file = new File("D:", "nir.txt");
Run Code Online (Sandbox Code Playgroud)

这是最平台无关的方法.


小智 5

转义斜杠 \\ 或将斜杠的方向更改为 /。我更喜欢改变方向。

所以你有二三种可能

FileReader in= new FileReader("D:\nir"); // Won't work as \ is an escape character

FileReader in= new FileReader("D:\\nir"); // Escaping, works but not my preferred way

FileReader in= new FileReader("D:/nir"); // I prefer this

FileReader in= new FileReader(new File("D:", "nir.txt")); // Update with help from Jon skeets nice find.
Run Code Online (Sandbox Code Playgroud)

更新:看看你的异常,它说 D:ir丢失了,看看斜杠和 n 是如何丢失的。Java 已将您的 \n 转换为新行字符,这显然被 FileReader 忽略


nIK*_*UNJ 5

我想,你应该首先检查文件是否存在.也可以使用:D:\\ file.txt

File file = new File(fileName);
if (file.exists()) {
    FileReader rader = new FileReader("D:\\file.txt");      
}
Run Code Online (Sandbox Code Playgroud)