В Java 7 список файлов с " относительным путем"

В Java 7 список файлов с " относительным путем"

29.01.2020 11:47:00 Просмотров 25 Источник

Учитывая приведенную ниже структуру каталогов:

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

некоторая функция ("dir2")

желаемый результат:

dir2/file1
dir2/file2
dir2/dirA/file3

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

Команда Unix find dir2 довольно точна.

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59975324/in-java-7-list-files-with-relative-path#comment106066586_59975324
Каков ожидаемый результат?
https://stackoverflow.com/questions/59975324/in-java-7-list-files-with-relative-path#comment106066670_59975324
@ArvindKumarAvinash список строк, показанных выше, или путей или файлов.
https://stackoverflow.com/questions/59975324/in-java-7-list-files-with-relative-path#comment106066715_59975324
Проверьте, если stackoverflow.com/questions/2056221/ ... отвечает на ваш вопрос.

Ответы - В Java 7 список файлов с " относительным путем" / In Java 7, list files with "relative path"

Является ответом!
that other guy

29.01.2020 11:55:25

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

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

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()));
  }
}
https://stackoverflow.com/questions/59975324/in-java-7-list-files-with-relative-path/59975440#comment106089506_59975440
Решение используя метод релятивизации устраняет необходимость для обработки строк и регулярных выражений.
Andreas

30.01.2020 12:48:21

Поскольку вы используете путь Java 7Path.

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

Вывод (на Windows 1)

someFunction("dir2");

1) в Linux пути будут иметь прямую косую черту вместо обратной косой черты.

Закрыть X