列出目录中的所有子文件夹并将其写入文本文件

时间:2013-05-06 16:02:07

标签: java file file-io file-listing

我需要列出目录中的所有子文件夹并写入文本文件。但是当我编码时,只有最后一个子文件夹才会写入文件。请帮助。我是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");
    }
}  

2 个答案:

答案 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()方法之后,数据将从内存中释放并写入您的文件。