IO异常从文件中读取文本

时间:2011-08-31 11:48:34

标签: 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();
    }
}

我收到此错误异常:

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)

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

4 个答案:

答案 0 :(得分:6)

这是问题所在:

new FileReader("D:\nir")

那是“D:”加上换行+“ir”。

我认为你的意思是

new FileReader("D:\\nir")

基本上反斜杠需要在Java字符串文字中进行转义。有关详细信息,请参阅section 3.10.6 in the Java language specification

(另外,我个人不会使用FileReader,因为它总是使用平台默认编码,但这是一个单独的问题。)

编辑:指定 类型斜杠的替代方法是使用File

File file = new File("D:", "nir.txt");

这是与平台无关的方法。

答案 1 :(得分:5)

我认为,您应首先检查文件是否存在。还可以使用: D:\\ file.txt

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

答案 2 :(得分:4)

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

所以你有两个三种可能性

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.

更新:看看你的异常,它说缺少 D:ir ,看看斜杠和n是如何丢失的。 Java已经将你的\ n转换为一个新的行字符,显然被FileReader

忽略了

答案 3 :(得分:2)

以下代码可避免或消除文件分隔符的问题:

import static java.io.File.separator;

然后您可以像这样使用文件分隔符:

final File test_file = new java.io.File("D:" + separator + "nir");