2017-03-05 77 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的旋转磁盘,则根据您的文件系统,200万个文件需要大约6个小时,可能是两倍。 –

+1

你的文件系统上是否有一半文件?如果没有,为什么你使用一个双倍的大小? '我=我'应该做什么?请尝试清理您的代码,不要在不需要时使用静态变量,正确缩进代码,并且系统地使用花括号代替代码块,即使块只有一条指令。并且不要捕获NullPointerException。 –

+2

你的代码可能是下面的快捷方式,以获得“回到自身之上”,它可能永远不会停止 –

回答

1

这很有可能是你的用户目录中包含一个快捷方式(也称为符号链接)到路径更高的文件夹,你的代码将遵循这些去文件已先后计算这将导致无限的联系。

E.g.

-Users 
    - Test 
    -ShortCutToUsers 

看到这个计算器问题确定符号链接的更多细节:

Java 1.6 - determine symbolic links

如果你是基于java 7+可以判断如下符号链接:

Files.isSymbolicLink(path) 
+0

亲爱的主席先生,我如何确保使用快捷方式返回顶端的事情不会发生?一个如果块的某种? –

+0

@Varun确实使用了'Files.isSymbolicLink(path)' –

相关问题