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。
我做了一个代码,它从一个文件夹中的不同文件中获取一堆数据,然后我确保只在文件中查找某种单词。然后我确保代码在控制台中打印出结果。
到目前为止我所做的所有事情都完美无缺,但问题来了。我希望代码还将 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。