Как вы читаете в файле из подкаталога в Java? - PullRequest
0 голосов
/ 22 марта 2019

У меня есть папка с именем Class, и ее две подкаталоги - Lectures и Grades, а внутри этих двух подкаталогов - txt-файлы. Как получить доступ к подкаталогам (и, возможно, к другим подкаталогам подкаталогов Lectures and Grades) из основного каталога - Class? Я знаю, что могу использовать абсолютный путь в коде, но я хотел бы начать с начальной папки, Class. Пока у меня есть этот код:

public class Test {
    public static void main(String[] args) {
        File directory = new File("/Users/Desktop/Class");
        File[] folder = directory.listFiles();
        for (File aFile : folder) {
            // Stuck here...
        }
    }
}

Извините .. Я новичок в Java ..

Ответы [ 4 ]

2 голосов
/ 22 марта 2019

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

public static void main(String[] args) {
    File currentDir = new File("/Users/Desktop/Class"); // current directory
    displayDirectoryFiles(currentDir);
}

public static void displayDirectoryFiles(File dir) {
    try {
        File[] files = dir.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                System.out.println("directory:" + file.getCanonicalPath());
                displayDirectoryContents(file);
            } else {
                System.out.println("     file:" + file.getCanonicalPath());
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

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

0 голосов
/ 22 марта 2019

В дополнение к ответу Ros5292 это может быть достигнуто с помощью библиотеки Apache Commons IO.

public void iterateFilesAndDirectoriesUsingApacheCommons() {
        Iterator it = FileUtils.iterateFilesAndDirs(new File("/Users/Desktop/"), TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
        while (it.hasNext()) {
            System.out.println(((File) it.next()).getName());
        }
    }
0 голосов
/ 22 марта 2019

вы смотрели на этот ответ: Java, список только подкаталогов из каталога, а не файлов ?

также это может быть решением, есть несколько способов: http://zetcode.com/articles/javalistdirectory/

0 голосов
/ 22 марта 2019
// Recursive Java program to print all files 
// in a folder(and sub-folders) 

import java.io.File; 

public class GFG 
{ 
    static void RecursivePrint(File[] arr,int index,int level) 
    { 
        // terminate condition 
        if(index == arr.length) 
            return; 

        // tabs for internal levels 
        for (int i = 0; i < level; i++) 
            System.out.print("\t"); 

        // for files 
        if(arr[index].isFile()) 
            System.out.println(arr[index].getName()); 

        // for sub-directories 
        else if(arr[index].isDirectory()) 
        { 
            System.out.println("[" + arr[index].getName() + "]"); 

            // recursion for sub-directories 
            RecursivePrint(arr[index].listFiles(), 0, level + 1); 
        } 

        // recursion for main directory 
        RecursivePrint(arr,++index, level); 
    } 

    // Driver Method 
    public static void main(String[] args) 
    { 
        // Provide full path for directory(change accordingly) 
        String maindirpath = "C:\\Users\\Gaurav Miglani\\Desktop\\Test"; 

        // File object 
        File maindir = new File(maindirpath); 

        if(maindir.exists() && maindir.isDirectory()) 
        { 
            // array for files and sub-directories 
            // of directory pointed by maindir 
            File arr[] = maindir.listFiles(); 

            System.out.println("**********************************************"); 
            System.out.println("Files from main directory : " + maindir); 
            System.out.println("**********************************************"); 

            // Calling recursive method 
            RecursivePrint(arr,0,0); 
    } 
    } 
} 
...