我需要列出目录中的所有子文件夹并写入文本文件。但是当我编码时,只有最后一个子文件夹才会写入文件。请帮助。我是Java的初学者。
public class Main {
// private Object bufferedWriter;
/**
* Prints some data to a file using a BufferedWriter
*/
public void writeToFile(String filename) {
try
{
BufferedWriter bufferedWriter = null;
bufferedWriter = new BufferedWriter(new FileWriter(filename));
int i=1;
File f=new File("D:/Moviezzz");
File[] fi=f.listFiles();
for(File fil:fi)
{
if(fil.isHidden())
{
System.out.print("");
}
else if(fil.isDirectory()||fil.isFile())
{
int s=i++;
String files = fil.getName();
//Start writing to the output stream
bufferedWriter.write(s+" "+fil);
bufferedWriter.newLine();
// bufferedWriter.write(s+" "+files);
}
}
//Construct the BufferedWriter object
} catch (FileNotFoundException ex) {
ex.printStackTrace();
}catch (IOException ex) {
ex.printStackTrace();}
}
public static void main(String[] args) {
new Main().writeToFile("d://my.txt");
}
}
答案 0 :(得分:0)
循环后关闭BufferedReader
。
for(File fil:fi)
{
...
}
bufferedReader.close();
此外,我建议您在代码中进行这些更改,以使其更具可读性和效率:
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filename));
...
if(!fil.isHidden() && (fil.isDirectory() || fil.isFile()))
{
...
}
您可以直接创建BufferedReader
。然后,您获取文件名,但没有使用它,所以只需删除get。最后,您不必将System.out.print("");
放在if
中以检查文件是否隐藏。您可以使用空语句甚至无代码,或使用!
运算符进行反转。
if(fil.isHidden())
{
; // Do nothing
}
else
{
// Do something
}
if(fil.isHidden()); // Do nothing
else
{
// Do something
}
if(!fil.isHidden)
{
// Do something
}
答案 1 :(得分:0)
Uptil你调用BufferWriter类的flush()
方法,它不会把你的数据写入文件。
每次循环都不需要flush()。但是你可以在循环结束后编写它。
放置yourObj.flush()
的主要方法是保持缓冲区内存清洁。在调用flush()方法之后,数据将从内存中释放并写入您的文件。