java - 在我的以下程序中摆脱 java.lang.NullPointerException

标签 java linux file exception

当我在/home/meow 目录中搜索某些内容并列出所有文件时,该程序工作正常,但是当我尝试列出系统“/”上的所有文件时,它会在打印/bin 目录的内容后崩溃。 我还尝试将其作为 SUDO java pin 执行

import java.io.*;

public class Pin
{
    public static void printFiles(String a)
    {
        File dir = new File(a);
        for(File file:dir.listFiles())
        {
            if(file.isFile())
            {
                System.out.println(file);
            }
            else
            {
                printFiles(file.toString());
            }
        }
    }
    public static void main(String[] args)
    {
        printFiles("/");
    }
}

这是我的输出...

vikkyhacks java # sudo java Pin
/lib64/ld-linux-x86-64.so.2
/bin/ntfsmove
/bin/init-checkconf
/bin/chown
/bin/mt-gnu
/bin/ntfs-3g.usermap
/bin/mountpoint
/bin/plymouth
/bin/s
/bin/bunzip2
/bin/gzexe
/bin/fgconsole
/bin/ntfstruncate
/bin/i
/bin/plymouth-upstart-bridge
/bin/fgrep
/bin/ping
/bin/lesspipe
/bin/rbash
/bin/gzip
/bin/ntfsmftalloc
/bin/lowntfs-3g
/bin/tailf
/bin/bzcat
/bin/tempfile
/bin/domainname
/bin/touch
/bin/zcmp
/bin/mktemp
/bin/nano
/bin/unicode_start
/bin/ln
Exception in thread "main" java.lang.NullPointerException
    at Pin.printFiles(Pin.java:9)
    at Pin.printFiles(Pin.java:17)
    at Pin.printFiles(Pin.java:17)
    at Pin.main(Pin.java:23)

最佳答案

您需要检查从 File#listFiles 返回的文件数组是否有效。这可能发生在所谓的逻辑文件的情况下,该文件实际上是物理文件的 View :

File[] files = dir.listFiles();
if (files != null) {
   for (File file : files) {
   ...

或者,您可以只处理目录中的任何内容

public static void printFiles(String a) {

   File[] files = new File(a).listFiles();
   if (files != null) {
      for (File file: files) {
         if (file.isFile()) {
            System.out.println(file);
         } else if (file.isDirectory()) {
            printFiles(file.toString());
         } 
      }
   }
}  

关于java - 在我的以下程序中摆脱 java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16108151/

相关文章:

java - 如何在 playframework 2.1 Java 上将 List<Object> 转换为 JSON

java - 为什么Java找不到符号

linux - 在文件中查找以字符开头的单词并添加/添加文本

python - 如何在python中获取文件关闭事件

Java - 运行外部代码

python - 检查是否存在重复,然后在行中附加一个唯一的数字?

java - 最佳实践 : catching failure points in java.net.URL

java - 如何将 AbstractTableModel 保存到文件中?

linux - 你如何构建 gstreamer 的 gst-launch 管道?

Linux shell : how to Iterate multiple file lists and take action on each line in the file?