我尝试将文件从一个目录移动到另一个目录。 我用
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
显示为:
^^
答案 0 :(得分:1)
如上面的注释中所述,要使用的正确成员称为File.separator
。
此外,您可以避免一般使用File.separator
,而改为使用Paths
:
System.out.println(Paths.get("/Users/kai-dj/separator_problem/to", fileToMove.getName()).toAbsolutePath());