重命名有时重命名使用下载管理器下载的文件时失败

时间:2014-11-09 19:46:37

标签: android

我正在使用下载管理器下载文件。如果文件已经下载,则下载管理器在文件名前面附加“-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。

请检查代码,说明文件未重命名的原因以及我的代码有什么问题。感谢

1 个答案:

答案 0 :(得分:0)

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

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

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

/storage/emulated/0/MyFiles/

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