簡體   English   中英

列出java中目錄和子目錄中的文件,僅包括部分文件路徑

[英]List files from directories and sub directories in java including only partial file paths

我需要從給定目錄中獲取文件及其父目錄的路徑,但不包括它。

因此,例如,如果我的方法被賦予路徑: /home/user/test作為路徑,它將返回該目錄中及其下的所有文件的路徑。

因此,如果/home/user/test具有子文件夾: /subdir1/subdir2每個子文件包含file1.txtfile2.txt則該方法的結果將是包含/subdir1/file1.txt/subdir2/file2.txt 2個字符串/subdir2/file2.txt

如果subdir1在其中有一個名為subsubdir的目錄,並且在該file3.txt ,那么為該文件創建的字符串將是/subdir1/subsubdir/file3.txt ,如果還有其他子目錄將繼續。

我的想法是我只想要文件上方的目錄路徑而不是絕對路徑,因此只有初始給定路徑之后的目錄。

我知道它有點令人困惑,但我相信有人可以理解它。 現在我所擁有的是一個遞歸函數,它打印出文件名及其絕對路徑。

對此有何幫助?

如果你嘗試了一些東西並且問了一些關於那個問題的話會有什么好處......

然而...

public class TestFileSearch {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new TestFileSearch();
    }

    public TestFileSearch() {
        File parentPath = new File("C:/Users/shane/Documents");
        List<String> files = list(parentPath);

        for (String file : files) {
            System.out.println(file);
        }
    }

    protected List<String> list(File parent) {
        return listFiles(parent, parent);
    }

    protected List<String> listFiles(File parent, File folder) {
        List<String> lstFiles = new ArrayList<String>(25);
        if (folder.isDirectory()) {

            File[] files = folder.listFiles();
            if (files != null) {
                for (File file : files) {
                    if (file.isDirectory()) {
                        lstFiles.addAll(listFiles(parent, file));
                    } else {
                        String path = file.getPath();
                        String offset = parent.getPath();

                        path = path.substring(offset.length());
                        lstFiles.add(path);
                    }
                }
            }
        }

        return lstFiles;
    }
}

你可以簡單地做一個普通的文件夾遞歸,返回一個文件列表和那個前綴的條帶,但這取決於你

如何使用您當前擁有的絕對路徑,但使用String.replace從中刪除前綴

你說你有完整的絕對路徑, 完整地
然后就做

String relative = full.replace(prefix, "");

如果輸入“/ home / user / text”,則文件的所有絕對路徑都將以/ home / user / text /開頭。 如果您已經能夠在text /下打印所有文件的列表,那么您需要做的就是選擇合適的子字符串。

以下函數應訪問pathToDir下的所有文件。 在printFileName函數中,您可以刪除/ home / user / text部分並打印文件名

public static void gotoAllFiles(File pathToDir) {
    if (pathToDir.isDirectory()) {
        String[] subdirs = pathToDir.list();
        for (int i=0; i<subdirs.length; i++) {
            gotoAllFiles(new File(pathToDir, subdirs[i]));
        }
    } else {
        printFileName(pathToDir);
    }
}

對於找到的每個文件,打印file.getAbsolutePath().substring(rootPath.length());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM