2

ディレクトリ内のすべてのサブフォルダーを一覧表示し、テキスト ファイルに書き込む必要があります。しかし、コーディングすると、最後のサブフォルダーのみがファイルに書き込まれます。助けてください。

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 に答える