如何在Java中删除图像后重命名文件并删除原始文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Java中删除图像后重命名文件并删除原始文件?相关的知识,希望对你有一定的参考价值。

我有一个问题,当我想更新我的(比方说订单号),我试图重命名的图像文件。比方说,原始文件在MainImage15,我想重命名为MainImage16与Files.Copy或Files.Move,然后我试图删除成功复制后,我得到了这样的错误。

java.nio.file.FileSystemException: C:UsersUserapachewebappsPromotion30000MainImage15.jpg: The process cannot access the file because it is being used by another process.
public void renameFileToFileSystem(final String fileName, final String oldFileLocation, final String newFileLocation) {
    Path source = Paths.get(oldFileLocation);
    Path destination = Paths.get(newFileLocation);
    try {
        Files.copy(source, destination, StandardCopyOption.REPLACE_EXISTING);
        Files.delete(source);
    } catch (final IOException ioException) {
        throw new ContentManagementException(fileName, ioException.getMessage());
    }
}

I dont know what to do. Should I use buffer close? but I just renaming the file.

答案

我不认为 Files.copy 保持文件句柄打开。

要确保它是真的--删除这一行 Files.copy

所以你必须找到是谁让这个句柄忙起来的。基本上有两种可能。

  1. 它在你代码中的其他地方
  2. 它的某种外部进程(杀毒软件,另一个你用来渲染图像的应用程序等等)。你可以使用 流程浏览器 这将有助于找到保持手柄的过程。

以上是关于如何在Java中删除图像后重命名文件并删除原始文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 java 代码重命名和移动文件而不删除内容

从云端删除原始图像

如何检查多个文件夹并删除具有唯一文件名的任何文件?

如何在 Hive 中对文件进行重复数据删除并保持原始排序顺序?

在文件作为 RandomAccessFile 打开并映射为 MappedByteBuffer 后重命名文件

如何在不使用重命名命令的情况下递归搜索目录并从文件名中删除开/关括号? [复制]