Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查目录是否可以打开并列出其文件_Java_Permissions_Directory - Fatal编程技术网

Java 检查目录是否可以打开并列出其文件

Java 检查目录是否可以打开并列出其文件,java,permissions,directory,Java,Permissions,Directory,我正在用Java开发一个shell。这个shell可以执行命令find'regex'。此命令递归查找名称与regex匹配的所有文件。查找文件的方法是: public void findFile(String regExp, String dirName) { File dir = new File(dirName); if (dir.canRead() == false) return; File[] files = dir.listFiles();

我正在用Java开发一个shell。这个shell可以执行命令
find'regex'
。此命令递归查找名称与
regex
匹配的所有文件。查找文件的方法是:

 public void findFile(String regExp, String dirName) {
    File dir = new File(dirName);

    if (dir.canRead() == false)
        return;

    File[] files = dir.listFiles();

    for (File file : files) {
        if (file.isFile() == true)
            if (file.getName().matches(regExp) == true)
                System.out.println(file.getAbsolutePath());
        if (file.isDirectory() == true && file.canRead() == true) {
            findFile(regExp, file.getAbsolutePath());
        }
    }
}

但如果无法打开目录,此命令将失败。例如,在
D:
分区中,我有一个名为
found.00
的隐藏目录(此目录可能属于系统),我无法打开此目录。当方法遇到此目录时,它将失败。如何检查目录是否属于系统且无法打开?

当您使用
file.canRead()
时,我想说您可以用try-catch将方法
findFile(String regExp,String dirName)
的完整内容包围起来。然后,您可以捕获并记录或忽略访问错误。请试试下面这个

public void findFile(final String regExp, final String dirName) {
   try {
      final File dir = new File(dirName);

      if (dir.canRead() == false) {
         return;
      }

      final File[] files = dir.listFiles();

      for (final File file : files) {
         if (file.isFile() && file.getName().matches(regExp)) {
               System.out.println(file.getAbsolutePath());
         }
         if ((file.isDirectory()) && (file.canRead())) {
            findFile(regExp, file.getAbsolutePath());
         }
      }
   } catch (final IOException ignore) {
      System.out.println("No access to '"+dirName+"'.");
   }
}

当您使用
file.canRead()
时,我想说您可以使用try-catch来围绕方法
findFile(String-regExp,String-dirName)
的完整内容。然后,您可以捕获并记录或忽略访问错误。请试试下面这个

public void findFile(final String regExp, final String dirName) {
   try {
      final File dir = new File(dirName);

      if (dir.canRead() == false) {
         return;
      }

      final File[] files = dir.listFiles();

      for (final File file : files) {
         if (file.isFile() && file.getName().matches(regExp)) {
               System.out.println(file.getAbsolutePath());
         }
         if ((file.isDirectory()) && (file.canRead())) {
            findFile(regExp, file.getAbsolutePath());
         }
      }
   } catch (final IOException ignore) {
      System.out.println("No access to '"+dirName+"'.");
   }
}

它可能不涵盖所有不可删除目录的情况,但您可以检查
文件#ishiden()
。而不是使用
文件.isFile()==true
,只需使用
文件.isFile()
。或者,如果您试图查看某个内容是否为
false
dir.canRead()==false
,只需使用
!dir.canRead()
@Jeffrey:我知道大型企业(>60000人)中的if(bool==true)是强制性的,if(b)是禁止的……我知道,我只希望我的代码易于阅读。它可能不包括所有不可处罚目录的情况,但你可以检查
文件#isheden()
。而不是使用
文件.isFile()==true
,只需使用
file.isFile()
。或者,如果您试图查看某个内容是否为
false
dir.canRead()==false
,只需使用
!dir.canRead()
@Jeffrey:我知道大型企业(>60000人)中的if(bool==true)是强制的,if(b)是禁止的……我知道,我只希望我的代码易于阅读。是的,但异常会中断递归?我不确定。当您尝试打开目录时,确切的异常是什么(可能还有stacktrace)?异常是:IOException.Strange。当您使用Java 7时,您可以尝试Java.nio.file.Path.Yes,但异常会中断递归?我不确定。当您尝试打开目录时,确切的异常是什么(可能还有stacktrace)?异常是:IOException.Strange。当您使用Java 7时,您可以尝试Java.nio.file.Path。