我正在尝试从驱动器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)
我不明白有什么问题,因为文件存在,名称是正确的,也许我没有使用正确的语法和命令?
答案 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");