Pertanyaan Program untuk mendapatkan semua file di dalam direktori di Java


Saya sedang mengerjakan program ini untuk mendapatkan semua file di direktori. Untuk beberapa alasan saya mendapatkan NullPointerException on Line 16. Saya tidak tahu mengapa karena ini adalah template yang sepertinya bekerja di kelas dengan guru kami. Terima kasih.

import java.util.*;
import java.io.*;

public class FindDirectories {
    public static void main(String[] args) { 
        if (args.length == 0) { 
            args = new String[] { ".." }; 
        }

        List<String> nextDir = new ArrayList<String>(); 
        nextDir.add(args[0]); // either the one file, or the directory
        try { 
            while(nextDir.size() > 0) {     // size() is num of elements in List 
                File pathName = new File(nextDir.get(0)); // gets the element at the index of the List 
                String[] fileNames = pathName.list();  // lists all files in the directory
                for(int i = 0; i < fileNames.length; i++) { 
                  File f = new File(pathName.getPath(), fileNames[i]); // getPath converts abstract path to path in String, 
                                                                    // constructor creates new File object with fileName name   
                  if (f.isDirectory()) { 
                     System.out.println(f.getCanonicalPath()); 
                     nextDir.add(f.getPath()); 
                  } 
                  else {
                      System.out.println(f);
                  }
               } 
               nextDir.remove(0); 
            } 
        } 
        catch(IOException e) { 
            e.printStackTrace();  
        }       
    } 
}

5
2017-07-26 05:57


asal


Jawaban:


Lihat Javadoc untuk File.list(). Secara khusus:

Mengembalikan null jika pathname abstrak ini tidak menunjukkan direktori, atau jika kesalahan I / O terjadi.

Dalam kode Anda pathName.list(); harus mengembalikan null jadi pathName tidak mewakili direktori yang valid, atau kesalahan IO terjadi saat mencoba mendapatkan daftar file dari direktori itu.


9
2017-07-26 06:03



Gunakan di bawah ini snippet untuk mendapatkan semua file dari semua sub direktori:

import java.io.File;

/**
 *
 * @author santoshk
 */
public class ListFiles {

     File mainFolder = new File("F:\\personal");
     public static void main(String[] args)
     {
         ListFiles lf = new ListFiles();
         lf.getFiles(lf.mainFolder);
     }
     public void getFiles(File f){
         File files[];
         if(f.isFile())
             System.out.println(f.getAbsolutePath());
         else{
             files = f.listFiles();
             for (int i = 0; i < files.length; i++) {
                 getFiles(files[i]);
             }
         }
     }
}

4
2018-04-07 06:37



Jika Anda mendapatkan NullPointerException pada baris 16, itu harus berarti itu fileNames adalah null, jadi fileNames.length tidak valid. Melihat javadoc untuk File.list dan Anda akan melihatnya pathName.list() bisa batal jika pathName bukan direktori, atau jika pengecualian terjadi. Jadi Anda hanya perlu memeriksa apakah fileNames adalah null sebelum mencoba menggunakannya.


0
2017-07-26 06:05



import java.io.File;
import java.util.ArrayList;
import java.util.LinkedList;


public class FileEnumerator {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {

        // Prepare the List of files
        String path = "C:/";
        ArrayList<String> Files = new ArrayList<String>();
        LinkedList<String> Dir = new LinkedList<String>();
        File f = new File(path);
        Dir.add(f.getAbsolutePath());
        while(!Dir.isEmpty())
        {
            f = new File(Dir.pop());
            if(f.isFile())
            {
                Files.add(f.getAbsolutePath());
            }
            else
            {
                String arr[] = f.list();
                try
                {
                for(int i = 0;i<arr.length;i++)
                {
                    Dir.add(f.getAbsolutePath()+"/"+arr[i]);
                }
                }
                catch(NullPointerException exp)
                {
                    Dir.remove(f.getAbsoluteFile());
                }
            }
        }


                //Print the files
        for(int i = 0;i<Files.size();i++)
        {
            System.out.println(Files.get(i));
        }
    }

}

Saya pikir kode ini harus berfungsi dengan baik. Meskipun saya sudah mengujinya hanya di Windows. Tetapi OS lain akan membutuhkan paling banyak perubahan kecil.


0
2018-04-23 10:25



import java.io.*;

public class filedir 
{
    public static void main(String[] args)
    {
        try{
            Files f = new File("C:\\");//the path required
            String a[];
            a=f.list(); 
            for (int i = 0; i <a.length; i++) {
               System.out.println(a[i]);
              }
        } catch(Exception e) {
            System.err.println(e);
        }
    }
}

0
2018-01-23 19:18