我正在尝试将一些文字写入文件。我有一个while循环,它应该只需要一些文本并将完全相同的文本写回文件。
我发现永远不会输入while循环,因为Scanner认为没有更多文本可供阅读。但是有。
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
public class WriteToFile {
public static void main(String[] args) throws FileNotFoundException {
String whatToWrite = "";
File theFile = new File("C:\\test.txt");
Scanner readinput = new Scanner(theFile);
PrintWriter output = new PrintWriter(theFile);
while (readinput.hasNext()) { //why is this false initially?
String whatToRead = readinput.next();
whatToWrite = whatToRead;
output.print(whatToWrite);
}
readinput.close();
output.close();
}
}
文本文件只包含随机单词。狗,猫等
当我运行代码时,text.txt变为空。
有一个类似的问题:https://stackoverflow.com/questions/8495850/scanner-hasnext-returns-false指出了编码问题。我使用Windows 7和美国语言。我能以某种方式找出文本文件的编码方式吗?
更新
事实上,正如Ph.Voronov评论的那样,PrintWriter系列会删除文件内容! user2115021是正确的,如果你使用PrintWriter,你不应该在一个文件上工作。不幸的是,对于我必须解决的任务,我不得不使用单个文件。这是我做的:
import java.util.ArrayList;
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
public class WriteToFile {
public static void main(String[] args) throws FileNotFoundException {
ArrayList<String> theWords = new ArrayList<String>();
File theFile = new File("C:\\test.txt");
Scanner readinput = new Scanner(theFile);
while (readinput.hasNext()) {
theWords.add(readinput.next());
}
readinput.close();
PrintWriter output = new PrintWriter(theFile); //we already got all of
//the file content, so it's safe to erase it now
for (int a = 0; a < theWords.size(); a++) {
output.print(theWords.get(a));
if (a != theWords.size() - 1) {
output.print(" ");
}
}
output.close();
}
}
答案 0 :(得分:9)
PrintWriter output = new PrintWriter(theFile);
它会删除您的文件。
答案 1 :(得分:1)
您正在尝试使用SCANNER读取文件并使用PRINTWRITER写入另一个文件,但两者都在同一个文件上工作.PRINTWRITER清除文件的内容以写入内容。类需要处理不同的文件。