Как я переименовываю (не, перемещаются), файл в JDK7?

Я немного перепутан со всеми этими новыми классами Файлового ввода-вывода в JDK7.

Скажем, у меня есть a Path и хочу переименовать файл, который это представляет. Как я указываю новое имя, когда снова a Path ожидается?

Path p = /* path to /home/me/file123 */;
Path name = p.getName(); /* gives me file123 */
name.moveTo(/* what now? */); /* how to rename file123 to file456? */

Примечание: Почему мне нужен JDK7? Обработка символьных ссылок!

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

Path newName(Path oldName, String newNameString){
    /* magic */ 
}
22
задан Oliv 26 June 2019 в 10:05
поделиться

4 ответа

У вас есть строка пути, и вам нужно создать экземпляр пути. Вы можете сделать это с помощью метода getPath или resolve. Вот один способ:

Path dir = oldFile.getParent();        
Path fn = oldFile.getFileSystem().getPath(newNameString);
Path target = (dir == null) ? fn : dir.resolve(fn);        
oldFile.moveTo(target); 

Обратите внимание, что он проверяет, является ли parent нулевым (похоже, ваше решение этого не делает).

7
ответ дан 29 November 2019 в 03:37
поделиться

Хорошо, попробовав все, кажется, я нашел правильный метод:

// my helper method
Path newName(Path oldFile, String newNameString){
    // the magic is done by Path.resolve(...)
    return oldFile.getParent().resolve(newNameString);
}

// so, renaming is done by:
oldPath.moveTo(newName(oldFile, "newName"));
4
ответ дан 29 November 2019 в 03:37
поделиться

Если путь назначения идентичен пути к источнику , за исключением имени файла , он будет переименован, а не перемещен.

Таким образом, для вашего примера, путь перемещения должен быть

/home/me/file456
0
ответ дан 29 November 2019 в 03:37
поделиться

Если вы посмотрите на Apache Commons IO, то увидите класс с именем FileNameUtils. Он делает тонну вещей с именами путей к файлам и будет (помимо всего прочего) надежно разделять имена путей и т.д. Я думаю, что это должно дать вам долгий путь к тому, что вы хотите.

1
ответ дан 29 November 2019 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: