繁体   English   中英

while循环和printwriter仅向文件写入一行

[英]while loop and printwriter only writes one line to file

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

到目前为止,我所做的所有工作都可以正常运行,但是问题来了。 我希望代码也将信息打印/写入.txt文件。 这种工作方式,但是它只打印来自不同文件的许多行之一。 我完全可以肯定,控制台打印出的数字不止一个,而且显示了至少20条包含正确单词的不同行。 我不能完全确定哪里出了问题,我还尝试添加.flush(); 就在.close();之前.close(); 但它仍然无法正常工作。 我也尝试添加pToDocu.close(); sc.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();
                }
                }
            }
        }

更新

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

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()调用,然后将其移动:

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();

去掉

pTD.close();

从您的while循环中。 您在第一次写入后关闭Print Writer编写器

看来您想将所有这些记录提交到PrintWriter 因此,您的pTD.close(); 必须在for循环之外,因为您在for循环之前声明了PrintWriter。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM