while 循环和 printwriter 只写一行到文件

while loop and printwriter only writes one line to file

我做了一个代码,它从一个文件夹中的不同文件中获取一堆数据,然后我确保只在文件中查找某种单词。然后我确保代码在控制台中打印出结果。

到目前为止我所做的所有事情都完美无缺,但问题来了。我希望代码还将 print/write 信息保存到 .txt 文件中。这种工作,但它只打印来自不同文件的许多行之一。我完全确定还有不止一个,因为控制台打印显示至少有 20 行包含正确的词。 我不完全确定哪里出错了,我也尝试在 .close(); 之前添加 .flush(); 但它仍然不起作用。我还尝试在 sc.close(); 下添加 pToDocu.close();,但这也不起作用,因为它甚至不写任何东西,只是创建一个空白文件。

所以简而言之,代码应该写一堆行,但它只写了一行。

 public static void lisFilesF(final File folderV) throws IOException {
            PrintWriter pTD = new PrintWriter("eFile.txt");
            for (final File fileEntry : folderV.listFiles()) {
                if (fileEntry.isDirectory()) {
                    listFilesForFolder(fileEntry);    
                } else {
                    System.out.println(fileEntry.getName());
                    try {
                        Scanner sc = new Scanner(fileEntry);
                        while (sc.hasNextLine()) {
                            String s = sc.nextLine();
                            if(s.contains("@"))
                            {
                            System.out.println(s);
                            pTD.println(s);
                            pTD.close();
                            }
                        }
                        sc.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                }
                }
            }
        }

更新

我已经更改了代码,现在在 while 循环之外有 pTD.close();,如下所示。唯一的问题是现在创建的文件是空白的,里面没有任何信息。

public static void lisFilesF(final File folderV) throws IOException {
                PrintWriter pTD = new PrintWriter("eFile.txt");
                for (final File fileEntry : folderV.listFiles()) {
                    if (fileEntry.isDirectory()) {
                        listFilesForFolder(fileEntry);    
                    } else {
                        System.out.println(fileEntry.getName());
                        try {
                            Scanner sc = new Scanner(fileEntry);
                            while (sc.hasNextLine()) {
                                String s = sc.nextLine();
                                if(s.contains("@"))
                                {
                                System.out.println(s);
                                pTD.println(s);
                                }
                            }
                            sc.close();
                            pTD.close();
                        } catch (Exception e) {
                            e.printStackTrace();
                    }
                    }
                }
            }

删除

pTD.close();

来自你的 while 循环。您在第一次写入

后关闭 Print Writer

您将在第一次写入后关闭文件 (pTD)。您应该从循环中提取 close() 调用并将其移动到它之后:

Scanner sc = new Scanner(fileEntry);
while (sc.hasNextLine()) {
    String s = sc.nextLine();
    if(s.contains("@")) {
        System.out.println(s);
        pTD.println(s);
    }
}
sc.close();
pTD.close();

您似乎想将所有这些记录提交给您的 PrintWriter。因此,您的 pTD.close(); 需要在 for 循环之外,因为您在 for 循环之前声明了 PrintWriter。