1

Javaを使用したファイルで、新しいファイルが追加された場合でも順序を変更せずにディレクトリ内のすべてのフォルダを一覧表示する方法は? プログラムを実行すると、ファイルをチェックしているかどうかを確認するために付けた「未チェック」コメントで無限ループになります。

    try
    {
        BufferedWriter bufferedWriter = null;
        bufferedWriter = new BufferedWriter(new FileWriter("d://my.txt"));
        BufferedReader br = new BufferedReader(new FileReader("d://my.txt"));

        int i=1;
        File f=new File("D:/Moviezzz");
        File[] fi=f.listFiles();
        for(File fil:fi)
        {
            if(!fil.isHidden() && (fil.isDirectory() || fil.isFile()))
            {
                int s=i++;

                String files = fil.getName();

                String thisLine;
                while(null != (thisLine="\t"+br.readLine()))
                {
                    String exist[]=thisLine.split("\t");
                    //ensure that it is already written in file 
                    if(exist[0].equals(files))
                    {
                        System.out.println("Checked");
                    }
                    //ensure that it is not written in file 
                    else
                    {
                        System.out.println("Not Checked");
                    }
                }
                bufferedWriter.write(s+"\t"+files);
                bufferedWriter.newLine();
                bufferedWriter.flush();
                System.out.print("yes");

                // bufferedWriter.write(s+" "+files);
            }    
            br.close();
            //Construct the BufferedWriter object
            System.out.println("Succ");
        }
    }
    catch(Exception ex)
    {
        System.out.println("failed");  
    }
4

1 に答える 1

2

whileループ内の条件が false になることは決してないため、無限ループが発生しています。

while(null != (thisLine="\t"+br.readLine()))

"\t"基本的に の結果に追加しているreadLine()ため、比較対象の値がnull実際に になることはありませんnull。その中には必ず があり\tます。


さらに調査した結果、ストリームの最後に到達すると、次のようthisLineになります"\tnull"

私があなただったら、あなたのwhileループでそのすべてを行うことはありません。私はもっ​​とこのようなことをします。

while(null != (thisLine=br.readLine()))
{
    thisLine = "\t"+ + thisLine;
    ...
于 2013-05-13T14:51:42.073 に答える