You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现重复下载同一文件时不覆盖而是生成新文件(使用PendingIntent.FLAG_UPDATE_CURRENT)

实现重复下载时创建新文件而非覆盖的方案

你的核心问题在于文件创建逻辑:当前代码直接使用传入的name生成文件,当文件已存在时FileOutputStream会默认覆盖原有内容。PendingIntent.FLAG_UPDATE_CURRENT标记和文件覆盖行为无关,它仅用于更新PendingIntent中的额外数据,不需要修改这个标记。

要实现重复下载保留多份文件,只需添加唯一文件名生成逻辑,当目标文件存在时,自动生成带序号的新文件名(如test.pdf→test(1).pdf→test(2).pdf)。以下是修改后的完整代码:

private String createPdf(String name, String pdfBase64) {
    byte[] pdfBytesData = Base64.decode(pdfBase64, Base64.DEFAULT);
    // 生成唯一文件名
    File downloadDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
    File targetFile = generateUniqueFileName(downloadDir, name);
    
    // 使用try-with-resources自动关闭流,避免资源泄漏
    try (FileOutputStream fileOutputStream = new FileOutputStream(targetFile)) {
        fileOutputStream.write(pdfBytesData);
        fileOutputStream.flush();
        return targetFile.getPath();
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

// 生成不重复的文件名
private File generateUniqueFileName(File directory, String originalName) {
    // 拆分文件名和扩展名
    String fileName = originalName;
    String extension = "";
    int dotIndex = originalName.lastIndexOf('.');
    if (dotIndex != -1) {
        fileName = originalName.substring(0, dotIndex);
        extension = originalName.substring(dotIndex);
    }

    File file = new File(directory, originalName);
    int counter = 1;
    // 循环检查文件是否存在,直到找到可用的文件名
    while (file.exists()) {
        String newName = fileName + "(" + counter + ")" + extension;
        file = new File(directory, newName);
        counter++;
    }
    return file;
}

代码关键点说明:

  • generateUniqueFileName方法:负责拆分原文件名的主体和扩展名,循环检查文件是否存在,若存在则追加递增序号,直到生成一个不存在的文件名。
  • try-with-resources语法:替代原来的手动流关闭,确保文件流无论是否异常都会被正确关闭,避免资源泄漏。
  • 完全保留原有文件写入逻辑,仅修改了文件对象的生成方式,不影响原有功能的同时解决了覆盖问题。

内容的提问来源于stack exchange,提问作者Gish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 02:09:11