2017-03-05 9 views
-1

これは自分のcomp内のすべてのファイルをカウントするコードです。コードは実行を停止せず、2000000を超えるファイルがあります。これは普通です、または無限ループのコードです。すべての助けをありがとう:)JAVAを使用しているコンピュータのすべてのファイルを見つける

import java.io.*; 
import java.util.*; 
//got the framework from this link: stackoverflow.com/questions/3154488 
public class RFF { 
    public static void main(String [] args) { 
     File[] files = new File("/Users").listFiles(); 
     showFiles(files); 
     System.out.println(size); 
    } 
    static File file1 = new File ("/Users/varun/Desktop/a.pdf"); 
    static double size = file1.length(); 

    static int i = 0; 
    public static void showFiles(File[] files) { 
     try { 
      for (File file: files) { 
       if (file.isDirectory()) { 
        if (file.isFile() == true) 
         i++; 
        else 
         i = i; 

        if (file.length() > size) 
         size = file.length(); 
        System.out.println("FileCount: " + i + ">>> FileSize: " +file.length() + " >>> FileName: " + file.getName()); 
        showFiles(file.listFiles()); // Calls same method again. 
       } else { 
        i++; 
        if (file.length() > size) 
         size = file.length(); 
        System.out.println("FileCount: " + i + ">>> FileSize: " + file.length() + " >>> FileName: " + file.getName()); 
       } 

      } 
     } catch (NullPointerException e) { 
      System.out.println ("Exception thrown :" + e); 
     } 


    } 
} 
+0

100 IOPSをサポートしている回転ディスクを使用している場合、ファイルシステムに応じて2百万のファイルが約6時間かかることがあります。 –

+1

あなたのファイルシステムに半分のファイルがありますか?そうでない場合は、なぜサイズの倍を使用しますか?私は何をすべきか?あなたのコードをきれいにしてください。必要がないときは静的変数を使用せず、コードを適切にインデントし、ブロックに命令が1つしかない場合でも中括弧をシステマティックに使用してください。そして、NullPointerExceptionをキャッチしないでください。 –

+2

あなたのコードがショートカットをたどって「上に戻る」ことがあります。その時点で決して停止することはありません –

答えて

1

あなたのユーザーディレクトリがパスの上位フォルダへのショートカット(別名シンボリックリンク)が含まれている可能性が高い、あなたのコードは、それがすでに持っているファイルを取得するには、これらに従いますこれを数えると無限のリンクにつながります。

など。

次のようにシンボリックリンクを決定することができます7+は、Javaを使っているのであればJava 1.6 - determine symbolic links

-Users 
    - Test 
    -ShortCutToUsers 

は、シンボリックリンクを決定するための詳細については、このstackoverflowの質問を参照してください

Files.isSymbolicLink(path) 
+0

親愛なる、どうしたら上に戻るためにショートカットを使用しているこの事を保証するのですか?ある種のifブロック? –

+0

@Varun実際には、 'Files.isSymbolicLink(path)' –

関連する問題