我制作的代码从文件夹中的不同文件中获取了大量数据,然后我确保只查找文件中的某种单词。然后我确保代码在控制台中打印出结果。
到目前为止,我所做的所有事情都很完美,但问题出现了。我希望代码也将信息打印/写入.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();
}
}
}
}
答案 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。