while loop和printwriter只将一行写入文件

时间:2016-11-23 19:57:32

标签: java file java.util.scanner printwriter println

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

到目前为止,我所做的所有事情都很完美,但问题出现了。我希望代码也将信息打印/写入.txt文件。这种工作,但它只打印不同文件中的许多行之一。我完全相信,由于控制台打印显示包含正确单词的至少20个不同行,因此还有更多。 我不完全确定我哪里出错,我还试图在.flush();之前添加.close();,但它仍然无效。我还尝试在pToDocu.close();下面添加sc.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();
                    }
                    }
                }
            }

3 个答案:

答案 0 :(得分:1)

您是在第一次写入文件后关闭文件(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();

答案 1 :(得分:0)

删除

pTD.close();
来自你的while循环

。您在第一次写入后关闭Print Writer

答案 2 :(得分:0)

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