【发布时间】:2016-11-23 19:57:32
【问题描述】:
我编写了一个代码,该代码从文件夹中的不同文件中获取一堆数据,然后我确保只在文件中查找特定类型的单词。然后我确保代码在控制台中打印出结果。
到目前为止,我所做的所有事情都完美无缺,但问题来了。我希望代码还将信息打印/写入 .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();
}
}
}
}
更新
我已将代码更改为现在将 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();
}
}
}
}
【问题讨论】:
-
第一次写入后您将关闭 PrintWriter (pTD)。在所有写入完成之前,您不应该关闭 PrintWriter
-
我认为您仍然过早关闭您的 pTD。您在 for 循环之前打开它。看起来你需要在你的 for 循环之后关闭它。
-
@blackpanda 你是一个血腥的传奇!它现在正在工作,非常感谢。 PS您可以将其作为答案,以便我可以将其作为正确的答案。
标签: java file java.util.scanner printwriter println