当前位置: 首页 > 知识库问答 >
问题:

为什么?Java中的txt文件在我运行程序时总是变成空的?

朱炳
2023-03-14

我试图从我的Java程序中读取一个充当数据库的. txt文件。在通过TextEdit和使用FileWriter类运行程序之前,我已经写入了该文件Java但是在运行这些代码行后,程序仍然显示一个空数组。这是唯一造成问题的地方,当我使用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个答案

祁飞飙
2023-03-14

你有

Scanner fileReader = new Scanner(userFile);
FileWriter fileWriter = new FileWriter(userFile);

因此,您的读者和作者都与userFile联系在一起。虽然开始时这已经是一个坏主意(它们会相互干扰),但在这种情况下,它也会导致您的问题。

原因是因为new FileWriter(userFile)会在文件开始写入之前截断文件。因此,对于您的fileReader来说,该文件也是空的。

通过添加true作为第二个参数(查看文档),可以在附加模式下打开FileWriter,但更大的问题是读卡器和写卡器同时绑定到同一资源。

我没有看到您在代码片段中使用文件编写器。因此,我建议您首先完成所有阅读并创建文件编写器,当您实际需要它时,在您完全阅读完它之后。

如果您确实想同时读取和写入,则应在列表中准备新文件内容

最后一点,更喜欢使用NIO进行此类文件操作。它使用起来要简单得多,并且还可以确保您不会使流保持打开时间超过必要的时间。

这部分对我来说看起来很奇怪:

StringBuilder fileInput = new StringBuilder();
while (fileReader.hasNext()) {
    fileInput.append(" ").append(fileReader.next());
}

String[] fileList = fileInput.toString().split(" ");

您正在读取文件并准备一个StringBuilder只是为了再次拆分结果。这非常浪费。您实际上应该在这里使用一个List

List<String> fileList = new ArrayList<>();
while (fileReader.hasNext()) {
    fileList.add(fileReader.next());
}

有了NIO,您可以扔掉扫描仪,简化为:

List<String> fileList = Files.lines(userFile.toPath())
    .collect(Collectors.toList());

 类似资料:
  • 嗨,这让我感到困惑,我正在尝试搜索我的文件中的选定数字,然后用该行的其余部分显示该数字,问题是我的程序似乎在我搜索它时返回第一行内容,但当我键入搜索它们时不会返回第二行或第三行 我的 txt 文件内容 我正在寻找的输出 当我键入2或3以查找项目时,我的程序不显示任何问题,我该如何解决它?

  • 我有一个简单的代码。我把一个数除以它的最小因子,直到得到1。但是由于某些原因,存储因子的arraylist变空了。 我的答案应该是6+3,因为6/2(最小因子)+1因为3/3(最小因子)。 我的错误是总数+=current/numbers.get(0); 当我打印arraylist时,它显示[2,3],但随后变为空。这是编译器。

  • 我正在尝试登录数据库。我有一个带有属性url、用户名和密码的bean;带有登录参数的html页面(带有url的组合框,以及用户名和密码的输入文本字段);和一个jsp来处理请求。当我运行jsp时,bean中的所有属性都保持为空。我已经通过调试器运行了它,我可以看到它们都是空的。 以下是相关的HTML: 以下是我的观点: 和JSP: 在尝试初始化B()时,我不明白为什么我的所有属性都为null。编辑:

  • 我使用Eclipse用java编写了一个很酷的程序。当我在eclipse中运行它时,它完全按照预期工作。我将它导出为一个jar文件,这样我就可以使用Launch4j将它转换为一个可执行文件(.exe文件扩展名),我成功地完成了,但是现在当我试图打开可执行文件时,它说程序不兼容。我尝试在命令行编译代码,当我键入“Java计算器”试图运行程序时,它运行得很好。所以我的问题是为什么可执行文件不能工作?任

  • 我已经彻底研究了所有的问题,但没有一个直接适用于我的问题。我正在循环访问用户ID数组并匹配它们以从我的firestore DB中获得一个用户。我会毫无问题地返回结果,但当我将其存储在状态数组中并运行控制台日志时,我的状态数组总是空的。第一个console.log工作并显示DB的结果。 请帮帮忙。

  • 按下开始按钮后,它运行程序,但它不允许我使用右下角的退出按钮,我不知道为什么它会这样做。有人能帮忙吗。我希望它继续运行该程序,但仍然允许我使用该按钮,因此,如果我想中途退出,它将允许我。项目描述:“对于我的项目,我将使用python创建一个随机迷宫生成软件。我将创建一个网格呈现给用户。该软件将从左上角开始,然后创建迷宫,沿随机方向运行,最后在右下角结束。”