Функция библиотеки Java для поиска теневого файла в другом каталоге - PullRequest
1 голос
/ 20 сентября 2010

У меня часто есть код, где я зацикливаюсь на каталоге (включая подкаталоги), и мне нужно переместить / скопировать файл в другой каталог.То, что я считаю утомительным, - это процесс определения, куда пойдет файл.Я часто так делал, обычно так:

File shadow = new File(sourceFile.getAbsolutePath()
                        .replace(
                             sourceFolder.getAbsolutePath(),
                             targetFolder.getAbsolutePath()
                        )
              );

Мой вопрос: есть ли стандартная процедура для этого или что-то подобное в любой крупной библиотеке с открытым исходным кодом?Я не нашел ни одного в Commons IO в любом случае ...

Я не ищу полных решений по перемещению / копированию, я знаю множество таких.Мне просто нужен эквивалент приведенного выше кода.


Пример в соответствии с запросом:

Исходная папка:

src/main/resources

Целевая папка:

target/classes

Исходный файл:

src/main/resources/com/mycompany/SomeFile.txt

Целевой файл (тот, который я ищу):

target/classes/com/mycompany/SomeFile.txt

(я обычно делаю такие вещи в контексте maven,отсюда эти папки, но они могут быть и папками non-maven, вопрос не имеет ничего общего с maven)

Ответы [ 2 ]

1 голос
/ 20 сентября 2010

То, что вы ищете, я так и не нашел, но скоро он появится, когда JDK 7 (в конце концов) вылезет за дверь.

Path.relativize (Path) (Java 7API)

А пока я бы придерживался вашего текущего решения (или бросил ваш собственный эквивалент вышеупомянутого).

1 голос
/ 20 сентября 2010

Видели ли вы метод org.apache.commons.io.FilenameUtils concat ?Для добавления требуется базовый каталог (ваша цель) и имя файла.Вам нужно будет вычислить префикс sourceFolder ("src / main / resources" .length ()) и создать подстроку.Что-то вроде:

File shadow = new File(FilenameUtils.concat(targetFolder.getAbsolutePath(),
    sourceFile.getAbsolutePath().substring(prefixLength));

Не намного лучше, чем прокатить самостоятельно.


У Apache org.apache.commons.io.FileUtils также есть функциональность, которую вы могли бы использовать, хотя я не вижу конкретного решенияна ваш вопрос:

Вы можете использовать copyDirectory с FileFilter для выбора файлов для перемещения:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...