【问题标题】:renameTo fail sometimes when renaming file downloaded using Download ManagerrenameTo 在重命名使用下载管理器下载的文件时有时会失败
【发布时间】:2016-06-12 22:05:55
【问题描述】:

我正在使用下载管理器下载文件。如果文件已下载,则下载管理器在文件名前附加“-1”。现在我想删除带有原始文件的旧文件,如果它已经存在,然后尝试重命名新文件。我在下载文件后执行此操作,以便在下载新文件之前不会删除旧文件。下面是我一直在使用的代码。

final File NewFile = new File(FileDirectory, FileNameWithoutExtension + "_" + DateMillis);

            DownloadManager.Request request = new DownloadManager.Request(FileUri);
            request.setDescription("Test Description");
            request.setTitle("Download");
            request.setAllowedOverRoaming(false);
            request.setDestinationInExternalPublicDir("/MyFiles", FileNameWithoutExtension + "_" + DateMillis);

下面是广播接收器的代码。我没有把所有的代码。只是 onReceive 方法中的重要代码行。

String uriString = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));                                 
File LatestFileDownloaded = new File(uriString);
String tmpName = uri.getLastPathSegment();

// Here I am deleting all the extra files with the same name but different appended letters
File[] extraFiles = FileDirectory.listFiles(new FileFilter() {
                                        @Override
                                        public boolean accept(File pathname) {
                                            return pathname.getName().contains(FileNameWithoutExtension + "_");
                                        }
                                    });

                                    if (extraFiles != null) {
                                        for (File extraFile : extraFiles) {
                                            if (!extraFile.getName().equals(tmpName)) {
                                                extraFile.delete();
                                            }
                                        }
                                    }

在此处重命名文件的一段代码,

if (!LatestFileDownloaded .getName().equals(FileNameWithoutExtension  + "_" + NodeDateMillis)) {
                                        LatestFileDownloaded.renameTo(NewFile );
                                        LatestFileDownloaded.delete();
                                    }

例如,如果文件 MyFile_1410642204000(没有任何扩展名)存在并且下载管理器下载一个新文件,那么新文件将以 MyFile_1410642204000-1 的名称保存。现在 MyFile_1410642204000-1 应重命名为 MyFile_1410642204000 并应删除旧文件 MyFile_1410642204000-1 但不是。所以在 SDCard MyFile_1410642204000-1 上存在。

请检查为什么文件没有被重命名的代码以及我的代码有什么问题。谢谢

【问题讨论】:

    标签: android


    【解决方案1】:

    我想我已经解决了这个问题,因为文件现在每次都成功重命名。我不确定 100% 这是文件重命名失败的唯一问题。下载管理器中的文件Uri是这样的,

    /file://storage/emulated/0/MyFiles/ 
    

    我为文件创建的路径没有文件:/前缀,

    /storage/emulated/0/MyFiles/
    

    我刚刚从 Uri 中删除了“/file:/”,文件已成功重命名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 2015-12-20
      • 2016-01-06
      • 1970-01-01
      • 2021-06-22
      • 2018-06-10
      相关资源
      最近更新 更多