Java 我不知道为什么我得到这个文件存在,但仍然显示错误
打印路径“D:\file”中所有目录的名称,并使用BufferedReader读取“D:\file\new.txt”文件的所有内容,然后使用BufferedWriter.exe将其写入同一位置的另一个文件copyOfNew.txt文件 代码如下:-Java 我不知道为什么我得到这个文件存在,但仍然显示错误,java,Java,打印路径“D:\file”中所有目录的名称,并使用BufferedReader读取“D:\file\new.txt”文件的所有内容,然后使用BufferedWriter.exe将其写入同一位置的另一个文件copyOfNew.txt文件 代码如下:- import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.io.BufferedReader; import java.io.Bu
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class thread {
public static void main(String[] args) throws IOException {
String dirName = "D:\\file";
Files.list(new File(dirName).toPath())
.limit(10)
.forEach(path -> {
System.out.println(path);
});
try (FileReader reader = new FileReader("D:\\file\new.txt");
BufferedReader br = new BufferedReader(reader)) {
// read line by line
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.err.format("IOException: %s%n", e);
}
try (FileWriter writer = new FileWriter("copyOfNew.txt");
BufferedWriter bw = new BufferedWriter(writer)) {
bw.write(dirName);
} catch (IOException e) {
System.err.format("IOException: %s%n", e);
}
}
}
我收到的错误:-
D:\file\new.txt
IOException: java.io.FileNotFoundException: D:\file
ew.txt (The filename, directory name, or volume label syntax is incorrect)
BUILD SUCCESSFUL (total time: 1 second)
您必须将
\n
转义为\\n
,否则会添加一个换行符,正如您在异常原因中看到的那样。字符串文字将\n
解释为一个换行符(而\
解释为\
)。每个反斜杠都需要转义:
FileReader reader = new FileReader("D:\\\\file\\new.txt")
用反斜杠转义告诉解析器以下字符(在本例中是另一个反斜杠)应该用作字符串的文字部分,而不是特殊字符。Java编译器正在用换行符替换文件路径
“D:\\file\new.txt”
中的\n
为了避免这种情况并简化一切,请使用独立于平台的目录分隔符/而不是仅限windows的字符\:
reader = new FileReader("D:/file/new.txt")
像在
“D:\\file\\new.txt”
中一样使用双反斜杠也可以,但是您必须记住要一致地使用它“D:\\file\new.txt”
应该是dirName+“\\new.txt”
“copyOfNew.txt”应该是dirName+“\\copyOfNew.txt”
。FileWriter和BufferedWriter声明应该位于reading while循环之上,并且直接位于System.out.println(line)之下代码>应该是:bw.append(line+System.lineSeparator())代码>。不要忘记关闭你的读者和作者,除非使用了Try With Resources。我只能在阅读这个问题的标题时猜出你在问什么。请多加努力:“我”应该用大写字母写,下面的句子没有任何意义。你是什么意思?你的意思是,你不能写这个文件吗?实际上我想写另一个文件,但它不工作。请看最后几行代码。你的意思是为什么编译器用换行符替换\\n?因为这就是如何在字符串中插入换行符的方法