2

指定されたディレクトリからJavaのファイルとその親ディレクトリのパスを取得する必要がありますが、それは含まれていません。

したがって、たとえば、私のメソッドにpath:が指定された場合、パス/home/user/testとして、そのディレクトリ内およびその下にあるすべてのファイルのパスが返されます。

したがって、/home/user/testサブフォルダがある場合:/subdir1そして/subdir2それぞれがを含みfile1.txtfile2.txtその後、メソッドの結果は、を含む2つの文字列に/subdir1/file1.txtなります/subdir2/file2.txt

また、その中にディレクトリがあり、その中subdir1にが呼び出された場合、そのファイル用に作成された文字列はになり、さらにサブディレクトリが存在する場合は続行されます。subsubdirfile3.txt/subdir1/subsubdir/file3.txt

アイデアは、ファイルの上のディレクトリパスだけが必要であり、絶対パスは必要ないため、最初に指定されたパスの後のディレクトリのみが必要です。

少し紛らわしいことは知っていますが、誰かがそれを理解できると確信しています。今私が持っているのは、ファイル名とその絶対パスを出力する再帰関数だけです。

これについて何か助けはありますか?

4

4 に答える 4

3

もしあなたが何かを試し、それについて質問したとしたら、何が良かったでしょう...

でも...

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;
    }
}

通常のフォルダ再帰を実行して、ファイルのリストとプレフィックスのストリップを返すこともできますが、それはあなた次第です

于 2012-09-20T03:06:26.153 に答える
1

現在使用している絶対パスを使用し、String.replaceを使用してプレフィックスを削除する場合はどうでしょうか。

あなたは完全な絶対的な道を持っていると言いまし

String relative = full.replace(prefix, "");
于 2012-09-20T03:11:29.680 に答える
0

「/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);
    }
}
于 2012-09-20T03:04:20.283 に答える
0

見つかったファイルごとに、file.getAbsolutePath().substring(rootPath.length());

于 2012-09-20T03:07:19.040 に答える