Подтвердить что ты не робот

Как перечислить файлы в текущем каталоге?

Я хочу иметь возможность перечислять файлы в текущем каталоге. Я сделал что-то, что должно работать, но не возвращает все имена файлов.

File dir = new File(".");
File[] filesList = dir.listFiles();
for (File file : filesList) {
    if (file.isFile()) {
        System.out.println(file.getName());
    }
}

Он возвращает .classpath, но я уверен, что у меня есть другие java файлы внутри этой папки. Может быть, текстовая нотация для текущей папки неверна?

4b9b3361

Ответ 1

Может быть, точечная нотация для текущей папки неверна?

Распечатайте результат File.getCanonicalFile(), чтобы проверить путь.

Может ли кто-нибудь объяснить мне, почему src не является текущей папкой?

Ваша IDE устанавливает путь к классу при вызове JVM.

например. (для Netbeans) Если вы выберете меню File | Project Properties (all classes) вы можете увидеть что-то похожее на:

Netbeans project options

Здесь интересен Working Directory.

Ответ 2

Попробуйте это, чтобы получить все файлы внутри папки и подпапки

public static void main(String[]args)
    {
        File curDir = new File(".");
        getAllFiles(curDir);
    }
    private static void getAllFiles(File curDir) {

        File[] filesList = curDir.listFiles();
        for(File f : filesList){
            if(f.isDirectory())
                getAllFiles(f);
            if(f.isFile()){
                System.out.println(f.getName());
            }
        }

    }

Получить только файлы/папки

public static void main(String[]args)
    {
        File curDir = new File(".");
        getAllFiles(curDir);
    }
    private static void getAllFiles(File curDir) {

        File[] filesList = curDir.listFiles();
        for(File f : filesList){
            if(f.isDirectory())
                System.out.println(f.getName());
            if(f.isFile()){
                System.out.println(f.getName());
            }
        }

    }

Ответ 3

Вы должны убедиться, что new File(".") действительно указывает на то, где вы думаете, что он указывает - .classpath предлагает корень некоторого проекта Eclipse....

Ответ 4

Был быстрый snoop вокруг для этого, но это похоже, что он должен работать. Я еще не тестировал его.

    File f = new File("."); // current directory

    File[] files = f.listFiles();
    for (File file : files) {
        if (file.isDirectory()) {
            System.out.print("directory:");
        } else {
            System.out.print("     file:");
        }
        System.out.println(file.getCanonicalPath());
    }

Ответ 5

В коде нет ничего плохого. Он должен перечислять все файлы и каталоги, непосредственно содержащиеся в назначенной директории.

Проблема, скорее всего, одна из следующих:

  • Каталог "." - это не то, что вы ожидаете от него. Путь "." на самом деле означает "текущий каталог" или "рабочий каталог" для JVM. Вы можете проверить, какой каталог "." на самом деле, распечатав dir.getCanonicalPath().

  • Вы не понимаете, что возвращает dir.listFiles(). Он не возвращает все объекты в дереве ниже dir. Он возвращает только объекты (файлы, каталоги, символические ссылки и т.д.), Которые находятся непосредственно в dir.

Файл ".classpath" предполагает, что вы смотрите каталог проекта Eclipse, а проекты Eclipse обычно настраиваются с файлами Java в подкаталоге, например "./src". Я бы не ожидал увидеть какой-либо исходный код Java в каталоге ".".


Может ли кто-нибудь объяснить мне, почему src не является текущей папкой? "

Предполагая, что вы запускаете приложение в Eclipse, текущая папка по умолчанию соответствует директории проекта. Вы можете изменить текущий каталог по умолчанию через одну из панелей в мастере настройки Launcher.

Ответ 6

Ваш код дает ожидаемый результат, если вы компилируете и запускаете свой код отдельно (из командной строки). Как и в eclipse для каждого проекта по умолчанию рабочим каталогом является каталог проекта, почему вы получаете этот результат.

Вы можете установить свойство user.dir в java как:

   System.setProperty("user.dir", "absolute path of src folder");

то он даст ожидаемый результат.

Ответ 7

Я использовал этот ответ с моим локальным каталогом (например, E://), он отлично работает для первого каталога, а для второго каталога на выходе было сделано исключение из java-нулевого указателя после поиска причины, по которой я обнаружил, что проблема был создан скрытым каталогом, и этот каталог был создан окнами чтобы избежать этой проблемы, просто используйте это

public void recursiveSearch(File file ) {
 File[] filesList = file.listFiles();
    for (File f : filesList) {
        if (f.isDirectory() && !f.isHidden()) {
            System.out.println("Directoy name is  -------------->" + f.getName());
            recursiveSearch(f);
        }
        if( f.isFile() ){
            System.out.println("File name is  -------------->" + f.getName());
        }
    }
}