Программа для получения всех файлов в каталоге на Java - PullRequest
5 голосов
/ 26 июля 2010

Я работаю над этой программой, чтобы получить все файлы в каталоге. По какой-то причине я получаю исключение NullPointerException в строке 16. Я не знаю почему, хотя, так как этот шаблон, казалось, работал в классе с нашим учителем. Спасибо.

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 ]

9 голосов
/ 26 июля 2010

Проверьте Javadoc для File.list(). В частности:

Возвращает ноль, если это абстрактное имя пути не обозначает каталог или если произошла ошибка ввода-вывода.

В вашем коде pathName.list(); должен возвращать ноль, поэтому pathName не представляет действительный каталог или произошла ошибка ввода-вывода при попытке получить список файлов из этого каталога.

4 голосов
/ 07 апреля 2012

Используйте приведенный ниже фрагмент, чтобы получить все файлы из всех подкаталогов:

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]);
             }
         }
     }
}
0 голосов
/ 23 января 2013
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 голосов
/ 23 апреля 2011
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));
        }
    }

}

Я думаю, этот код должен хорошо работать.Хотя я проверял это только на Windows.Но для других ОС потребуется не более мелких изменений.

0 голосов
/ 26 июля 2010

Если вы получаете исключение NullPointerException в строке 16, это должно означать, что fileNames равно нулю, поэтому fileNames.length недопустимо.Посмотрите на javadoc для File.list , и вы увидите, что pathName.list() может быть нулевым, если pathName не является каталогом или если возникает исключение.Так что вам просто нужно проверить, является ли fileNames нулевым, прежде чем пытаться его использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...