John dev
John dev

Reputation: 21

recursively get files and directories list in java

I want get all files and directories list, and this is my code:

package com.loiane.util;
import java.io.File;
import java.io.FileFilter;
import java.nio.file.*;
import java.util.ArrayList;
public class ListFilesUtil {
    public static void getList(String dir){
        File folder = new File(dir);
        File[] listOfFiles = folder.listFiles();
            for (int i = 0; i < listOfFiles.length; i++) {
              if (listOfFiles[i].isFile()) {
                System.out.println(listOfFiles[i].getName());
              } else if (listOfFiles[i].isDirectory()) {
                System.out.println(listOfFiles[i].getAbsolutePath());
                File folder1 = new File(dir);
                File[] listOfFiles1 = folder.listFiles();
                if(listOfFiles1.length>0)
                ListFilesUtil.getList(listOfFiles1[i].getPath());
              }
            }
    }
    public static void main(String[] args) {
          File dir = new File("C:\\");
          String d="C:\\";
          ListFilesUtil.getList(d);
       }
}

but when I run it just work two Item and for rest of directories and file give me this error:

 Exception in thread "main" java.lang.NullPointerException
    at com.loiane.util.ListFilesUtil.getList(ListFilesUtil.java:10)
    at com.loiane.util.ListFilesUtil.getList(ListFilesUtil.java:18)
    at com.loiane.util.ListFilesUtil.getList(ListFilesUtil.java:18)
    at com.loiane.util.ListFilesUtil.main(ListFilesUtil.java:25)

How I can fix it? Please help, thank u.

Upvotes: 1

Views: 169

Answers (1)

Sachin Gupta
Sachin Gupta

Reputation: 8358

You need to do some defensive coding here. As folder.listFiles() can also return null . here is the working code :

 public static void getList(String dir) {
        File folder = new File(dir);
        File[] listOfFiles = folder.listFiles();
        if (listOfFiles != null) {

            for (int i = 0; i < listOfFiles.length; i++) {
                if (listOfFiles[i].isFile()) {
                    System.out.println(listOfFiles[i].getName());
                } else if (listOfFiles[i].isDirectory()) {
                    System.out.println(listOfFiles[i].getAbsolutePath());
                    File[] listOfFiles1 = folder.listFiles();
                    if (listOfFiles1 != null) {
                        for (int j = 0; j < listOfFiles1.length; j++) {
                            ListFilesUtil.getList(listOfFiles1[j].getPath());
                        }
                    }
                }
            }
        }
    }

Upvotes: 1

Related Questions