Java 在文件上使用重命名更改内容
假设/dir1/包含5个文件。此代码将打印0。但是,如果我将代码更改为`Java 在文件上使用重命名更改内容,java,android,path,directory,Java,Android,Path,Directory,假设/dir1/包含5个文件。此代码将打印0。但是,如果我将代码更改为` File dir = new File(getFilesDir(), "dir1"); dir.renameTo(new File(getFilesDir(), "dir2"); Log.d("Number of files:", dir.listFiles().length); 它将打印正确的值:5。这有什么原因吗?在我使用renameTo之后,dir似乎没有链接到同一个目录。原因是在您的第一个代码中,dir仍然指向目
File dir = new File(getFilesDir(), "dir1");
dir.renameTo(new File(getFilesDir(), "dir2");
Log.d("Number of files:", dir.listFiles().length);
它将打印正确的值:5。这有什么原因吗?在我使用renameTo之后,dir似乎没有链接到同一个目录。原因是在您的第一个代码中,dir仍然指向目录
dir1
,而不是dir2
但是,在以下代码中:
File dir = new File(getFilesDir(), "dir1");
dir.renameTo(new File(getFilesDir(), "dir2");
dir = new File(getFilesDir(), "dir2");
Log.d("Number of files:", dir.listFiles().length);
dir
现在指向dir2
,因此您得到了正确的值
我建议您避免使用Java的File.renameTo(),因为它有问题,尤其是在Windows上。正如API文档所述:
此方法行为的许多方面都是固有的
平台相关:重命名操作可能无法移动
从一个文件系统到另一个文件系统,它可能不是原子的,而且
如果文件的目标抽象路径名为
已经存在。应始终检查返回值以确保
重命名操作已成功
您可以使用apache.commons.io库,其中包括FileUtils.moveFile()或JDK 7中的Files.move()方法。原因是在第一个代码中,dir仍然指向目录
dir1
,而不是dir2
但是,在以下代码中:
File dir = new File(getFilesDir(), "dir1");
dir.renameTo(new File(getFilesDir(), "dir2");
dir = new File(getFilesDir(), "dir2");
Log.d("Number of files:", dir.listFiles().length);
dir
现在指向dir2
,因此您得到了正确的值
我建议您避免使用Java的File.renameTo(),因为它有问题,尤其是在Windows上。正如API文档所述:
此方法行为的许多方面都是固有的
平台相关:重命名操作可能无法移动
从一个文件系统到另一个文件系统,它可能不是原子的,而且
如果文件的目标抽象路径名为
已经存在。应始终检查返回值以确保
重命名操作已成功
您可以使用apache.commons.io库,其中包括FileUtils.moveFile()或JDK 7中的Files.move()方法