我试图读入一个.txt文件,该文件充当java程序中的数据库。在通过textedit和使用javafilewriter类运行程序之前,我已经写入了文件,但是在运行这些代码行之后,程序仍然显示空数组。当我使用arraylist作为临时数据库时,这是唯一产生问题的部分,代码的其余部分(这里没有显示)运行得非常好。有人能帮我找出为什么.txt文件总是空的吗?
String filePathName = "User Data.txt";
File userFile = new File(filePathName);
if (userFile.createNewFile()) {
System.out.println("Database has been successfully created");
System.out.println();
}
Scanner fileReader = new Scanner(userFile);
FileWriter fileWriter = new FileWriter(userFile);
Scanner userInput = new Scanner(System.in);
ArrayList<User> userInfo = new ArrayList<>();
boolean actionValid = false;
StringBuilder fileInput = new StringBuilder();
while (fileReader.hasNext()) {
fileInput.append(" ").append(fileReader.next());
}
String[] fileList = fileInput.toString().split(" ");
System.out.println(Arrays.toString(fileList));
1条答案
按热度按时间wgxvkvu91#
解释
你有
所以你的读者和作者都和
userFile
. 虽然这已经是一个坏主意开始(他们会相互干扰),在这种特殊情况下,它也会导致你的问题。原因是因为
new FileWriter(userFile)
将在文件开始写入之前截断它。因此,文件也为空fileReader
立即。解决方案
你可以打开一个
FileWriter
通过添加true
作为第二个参数(请查看文档),但正如前面所说,更大的问题是,读写器同时绑定到同一个资源。我没看到你用
fileWriter
在代码段中。因此,我建议你首先完成你所有的阅读和创作fileWriter
稍后,当你真的需要它时,在你读完它之后。如果您真的想同时读写,您应该在
List<String>
先把实际的写作推迟到你写完的那一刻。nio公司
最后一个注意事项是,我们更喜欢使用nio进行此类文件操作。它使用起来简单得多,而且还可以确保流的开放时间不会超过需要的时间。
评论
我觉得这部分很奇怪:
您正在读取文件并准备
StringBuilder
只是为了再次分割结果。这太浪费了。实际上你应该用的是List
:使用nio,您可以扔掉扫描仪,简化为: