将文件移动到文件名中带有路径分隔符“ /”的文件

时间:2019-02-05 16:15:29

标签: java macos io

我尝试将文件从一个目录移动到另一个目录。 我用

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,但是我得到了一个名为 的文件{strong> to/file_to_move.file,该文件放置在父文件夹{{1 }}。至少这就是Finder所显示的。

我以为:“文件名不能包含路径分隔符,这是不正确的。”,我还检查了/Users/kai-dj/separator_problem在终端中将输出什么:

ls

OK –文件名中似乎没有mac-book:separator_problem kai-dj$ ls from to:file_to_move.file to 。尽管如此,还是很奇怪。 Finder为什么将其显示为包含/的文件名? 为什么Java为什么将文件重命名为/?特别是即使我使用<dirname>:<filename>而不是File.pathSeparator,当然也不是/时,

我也尝试了: –同样的结果。

编辑: 已解决,但我还是很想知道,为什么Finder将Files.move显示为: ^^

1 个答案:

答案 0 :(得分:1)

如上面的注释中所述,要使用的正确成员称为File.separator

此外,您可以避免一般使用File.separator,而改为使用Paths

System.out.println(Paths.get("/Users/kai-dj/separator_problem/to", fileToMove.getName()).toAbsolutePath());