перемещение файла приводит к файлу с разделителем пути "/" в имени файла - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь переместить файл из одного каталога в другой.Я делаю это с

File fileToMove = new File("/Users/kai-dj/separator_problem/from/file_to_move.file");
File destDir = new File("/Users/kai-dj/separator_problem/to");
if (fileToMove.exists() && destDir.isDirectory()) {
  fileToMove.renameTo(new File(destDir.getAbsolutePath()+File.pathSeparator+fileToMove.getName()));
}

Я ожидаю найти file_to_move.file в папке /Users/kai-dj/separator_problem/to после выполнения, но я получаю файл с именем to/file_to_move.file, помещенный в родительскую папку/Users/kai-dj/separator_problem.По крайней мере, это то, что показывает Finder.

Как я и думал: «Имена файлов не должны содержать символов разделителя пути, это не может быть правдой». Я также проверил, что ls будет выводить в терминале:

mac-book:separator_problem kai-dj$ ls
from        to:file_to_move.file
to          

ОК - кажется, нет / в имени файла.Очень странно, тем не менее.Почему Finder показывает его как имя файла, содержащее /?Почему Java переименовывает файл в <dirname>:<filename> - особенно, даже когда я использовал File.pathSeparator, а не / и, конечно, не :?

Я также пытался с Files.move - тот же результат.

РЕДАКТИРОВАТЬ: Решено, но я все еще хотел бы знать, почему Finder показывает : как / ^^

1 Ответ

0 голосов
/ 05 февраля 2019

Как упомянуто в комментарии выше, правильный член для использования называется File.separator.

Кроме того, вы можете вообще не использовать File.separator и использовать Paths вместо:

System.out.println(Paths.get("/Users/kai-dj/separator_problem/to", fileToMove.getName()).toAbsolutePath());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...