В Java 7 список файлов с «относительным путем» - PullRequest
0 голосов
/ 29 января 2020

С учетом приведенной ниже структуры каталогов:

/dir1
/dir1/dir2
/dir1/dir2/file1
/dir1/dir2/file2
/dir1/dir2/dirA/file3

someFunction ("dir2")

желаемый вывод:

dir2/file1
dir2/file2
dir2/dirA/file3

Я использую FileUtils.listFiles и Paths а потом Струнная манипуляция, но интересно, если получше. Просто кажется запутанным.

Команда Unix find dir2 довольно удобна.

Ответы [ 2 ]

1 голос
/ 30 января 2020

Поскольку вы используете Java 7 Path, вы также можете использовать Java 7 Files.

static void someFunction(String dir) throws IOException {
    Files.walkFileTree(Paths.get(dir), new SimpleFileVisitor<Path>() {
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
            System.out.println(file);
            return FileVisitResult.CONTINUE;
        }
    });
}

Тест

someFunction("dir2");

Выход (вкл. Windows 1 )

dir2\dirA\file3
dir2\file1
dir2\file2

1) На Linux пути будут иметь прямую sla sh вместо backsla sh.

1 голос
/ 29 января 2020

У вас есть базовый каталог и Collection<File>. Вы можете использовать Path.relativize, чтобы получить относительный путь от одного к другому.

Этот пример, учитывая /dir1 и /dir1/foo/bar/baz, приведет к foo/bar/baz без каких-либо строковых операций fr agile:

import java.io.*;
import java.nio.file.*;

class Foo {
  public static void main(String[] args) throws Exception {
    Path base = Paths.get("/dir1");
    File f = new File("/dir1/foo/bar/baz");
    System.out.println(base.relativize(f.toPath()));
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...