2

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

2 回答 2

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
}
于 2013-05-06T16:11:54.113 回答
0

Uptil 您调用flush()BufferWriter 类的方法,它不会将您的数据写入文件。

没有必要在循环中每次都刷新()。但是您可以在循环结束后编写它。

要说的主要yourObj.flush()是保持缓冲存储器的清洁。在调用该 flush() 方法后,数据将从内存中释放并写入您的文件。

于 2013-05-06T16:22:08.463 回答