Почему File.renameTo (...) не создает подкаталоги назначения? - PullRequest
4 голосов
/ 25 июля 2011

Почему File.renameTo(...) не создает подкаталоги, содержащиеся в пути к целевому файлу?


Например,

File source = new File(System.getProperty("user.dir") + 
                "/src/MyFolder/MyZipFolder.zip");
File dest = new File(System.getProperty("user.dir") + 
                "/src/MyOtherFolder/MyZipFolder.zip");
System.out.println(source.renameTo(dest));

Поскольку MyOtherFolder не существует, это всегда будет возвращать false.Чтобы это работало, я должен убедиться, что все подкаталоги существуют, создавая их программно (например, mkdirs()) или вручную.Есть ли причина, по которой эта функция не была включена в этот метод?

Ответы [ 4 ]

3 голосов
/ 25 июля 2011

Почему?

Возможно, для согласованности / совместимости с API, которые предоставляют типичные операционные системы и библиотеки времени выполнения других языков программирования.

Возможно, потому что создание промежуточных каталогов было бы плохой идеейесли пользователь действительно не хотел, чтобы это произошло;например, если он / она просто набрал одно из имен каталогов в пути.

Но это не совсем актуально.Суть в том, что именно так ведет себя метод renameTo.

1 голос
/ 25 июля 2011

Текущий File API не очень хорошо реализован в Java. Существует много функциональных возможностей, которые были бы желательны в файловом API, которые в настоящее время отсутствуют, такие как перемещение, копирование и получение метаданных файла.

Не думаю, что кто-нибудь сможет дать вам ответ на вопрос, почему API написано как есть. Вероятно, плохой первый черновик, который был запущен и не мог быть изменен из-за проблем обратной совместимости.

Эта проблема была решена в следующей версии Java 7. Был создан совершенно новый API для работы с файлами java.nio.file.Files .

1 голос
/ 25 июля 2011

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

0 голосов
/ 23 апреля 2013

У вас есть ответы, но я думал так: Запрос на добавление нового метода File.renameTo (File src, File destination, int makeDirs)

с тремя константами для makeDirs: 1) не делайте подпапки (s) / dirs 2) создайте последнюю папку только в том случае, если она не существует, то есть, если вы укажете /r1/r2/r3/file.extn, то создайте r3 только в том случае, если она не существует, если r2 или любой другой не существует, верните false. 3) сделать все возможное sub dirs

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