Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 移动文件会导致文件名中带有路径分隔符“/”的文件_Java_Macos_Io - Fatal编程技术网

Java 移动文件会导致文件名中带有路径分隔符“/”的文件

Java 移动文件会导致文件名中带有路径分隔符“/”的文件,java,macos,io,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

我尝试将文件从一个目录移动到另一个目录。 我这样做是因为

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()));
}
执行后,我希望在/Users/kai dj/separator\u problem/to文件夹中找到文件to\u move.file,但我会在父文件夹/Users/kai dj/separator\u problem中找到一个名为to/file\u to\u move.file的文件。至少Finder显示了这一点

正如我所想:文件名不能包含路径分隔符,这不可能是真的。我还检查了ls将在终端中输出什么:

mac-book:separator_problem kai-dj$ ls
from        to:file_to_move.file
to          
OK–文件名中似乎没有/。非常奇怪的是,它是无柄的。 为什么Finder将其显示为包含/的文件名? 为什么Java会将文件重命名为:–尤其是当我使用file.pathseptor时,不是/当然不是:

我还尝试了Files.move–同样的结果


编辑:已解决,但我仍然想知道,为什么Finder显示:as/^^

正如上面的评论中提到的,要使用的正确成员称为File.separator

此外,您通常可以避免使用File.separator,而是使用路径:


File.pathSeparator是冒号。您可能想改用File.separator?另一个变体可能更容易使用双参数构造函数new Fileparent、child甚至更容易使用的路径
System.out.println(Paths.get("/Users/kai-dj/separator_problem/to", fileToMove.getName()).toAbsolutePath());