Java文件权限问题

时间:2013-08-25 01:17:27

标签: java recursion file-permissions

我尝试使用Java编写一个方法,该方法将递归搜索.exe文件。我遇到的问题是,当涉及" C:\ Program Files(x86)\ Google \ CrashReports"

的目录时

似乎无论我尝试什么,我总是因为这个文件而得到NullPointerException。我已经尝试确保我要么不将其添加到要递归检查的文件列表中,要么至少跳过它,如果它确实将其放入要检查的文件列表中。< / p>

现在我的代码是不正确的,但这很可能是一个逻辑上的谬论,我会非常感谢Java如何认为它可以读取这个文件。

private static List<String> exefiles = new ArrayList<String>();
public void findExe(File rootDir) throws SecurityException, IOException{
    List<File> files = new ArrayList<File>(Arrays.asList(rootDir.listFiles()));
    List<File> directories = new ArrayList<File>();
    Iterator<File> iterator = files.iterator();
    if(files.size() > 0){
        while(iterator.hasNext()){
            File currentFile = iterator.next();
            if(currentFile.getName().endsWith(".exe")){
                exefiles.add(currentFile.getAbsolutePath());
            }else if(currentFile.isDirectory()){
                if(currentFile.canRead()){
                    System.out.println("We can read " + currentFile.getAbsolutePath());
                    if(currentFile.listFiles().length > 0){
                        System.out.println(currentFile.getAbsolutePath() + " has a length greater than 0");
                        directories.add(currentFile);
                    }else{System.out.println(currentFile.getAbsolutePath() + " does not have any files in it");}
                }else{
                    System.out.println("Could not add " + currentFile.getAbsolutePath() + " to directories because it could not be read");
                }
            }else;
        }
    }

当我使用Windows打开文件属性时,系统和管理员组具有完全控制权,而用户组仅具有&#34;特殊权限。&#34;

我知道Java 7提供了通过java.nio.file包处理属性的更简单方法,但是这个选项不适合我的需要。

1 个答案:

答案 0 :(得分:2)

如果你没有将目录传递给它,那么

listFiles将返回null,或者如果你传递了它无法正确处理的东西,比如一个连接点。使用其他软件包可能能够验证您是否正在查看联结点,但是您无法使用基本文件API执行此操作。所以说,你可以只是快速检查无效,所以改变

}else if(currentFile.isDirectory()){

}else if(currentFile.isDirectory() && currentFile.listFiles()!=null){