下载文件前检查文件是否存在
Check If File Exists Before downloading the file
我正在使用下载管理器下载文件。下载文件的代码如下。
private String DownloadData(Uri uri, View v, String textview) {
long downloadReference;
// Create request for android download manager
dm = (DownloadManager)getContext().getSystemService(DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(uri);
//Setting title of request
request.setTitle(textview);
//Setting description of request
request.setDescription("Android Data download using DownloadManager.");
//Set the local destination for the downloaded file to a path within the application's external files directory
request.setDestinationInExternalFilesDir(getContext(), DIRECTORY_DOWNLOADS, File.separator + "Dr_Israr_Ahmad" + File.separator + textview+".mp3");
//Enqueue download and save into referenceId
downloadReference = dm.enqueue(request);
return null
}
以上代码运行良好。我现在需要做的是,如果文件已经下载,我想让我的应用程序播放它。使用的代码是
String path = String.valueOf(getContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS+ File.separator+"Dr_Israr_Ahmad" + File.separator +filename+".mp3"));
File file = new File(path);
if(file.exists()){
Toast.makeText(getContext(),path+ "/n exists", Toast.LENGTH_SHORT).show();
} else if (!file.exists()) {
Toast.makeText(getContext(), "Downloading", Toast.LENGTH_SHORT).show();
Uri uri = Uri.parse("http://www.digitalsguide.com/mobile-apps/dr-israr-ahmad/audios/"+filename+".mp3");
String filepath = DownloadData(uri,view,filename);
}
但问题是即使文件不存在,条件也为真。我的路径有问题吗?请帮助我,
我在 exists
前检测到一些奇怪的行为并将其更改为 isFile
:
File file = new File(path);
if (file.isFile()) {
Toast.makeText(getContext(), path + "/n exists", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getContext(), "Downloading", Toast.LENGTH_SHORT).show();
// ...
}
我认为移动设备在每次执行 new File()
时都会以某种方式创建一个目录。
检查这个。
.getExternalFilesDir(yourFilePath)
在您的代码中创建一个目录。所以像这样使用它。
String path = String.valueOf(getContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)+ File.separator+"Dr_Israr_Ahmad" + File.separator +filename+".mp3");
因为getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)
returns/storage/emulated/0/Android/data/<PACKAGE_ID>/files/Download
。不是我们设置Environment.DIRECTORY_DOWNLOADS
时DownloadManager
下载文件的文件夹。
尝试将您的路径设置为如下所示的示例:
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+ "/" +filename);
这里的文件名是example.pdf
然后你可以检查文件是否存在
我正在使用下载管理器下载文件。下载文件的代码如下。
private String DownloadData(Uri uri, View v, String textview) {
long downloadReference;
// Create request for android download manager
dm = (DownloadManager)getContext().getSystemService(DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(uri);
//Setting title of request
request.setTitle(textview);
//Setting description of request
request.setDescription("Android Data download using DownloadManager.");
//Set the local destination for the downloaded file to a path within the application's external files directory
request.setDestinationInExternalFilesDir(getContext(), DIRECTORY_DOWNLOADS, File.separator + "Dr_Israr_Ahmad" + File.separator + textview+".mp3");
//Enqueue download and save into referenceId
downloadReference = dm.enqueue(request);
return null
}
以上代码运行良好。我现在需要做的是,如果文件已经下载,我想让我的应用程序播放它。使用的代码是
String path = String.valueOf(getContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS+ File.separator+"Dr_Israr_Ahmad" + File.separator +filename+".mp3"));
File file = new File(path);
if(file.exists()){
Toast.makeText(getContext(),path+ "/n exists", Toast.LENGTH_SHORT).show();
} else if (!file.exists()) {
Toast.makeText(getContext(), "Downloading", Toast.LENGTH_SHORT).show();
Uri uri = Uri.parse("http://www.digitalsguide.com/mobile-apps/dr-israr-ahmad/audios/"+filename+".mp3");
String filepath = DownloadData(uri,view,filename);
}
但问题是即使文件不存在,条件也为真。我的路径有问题吗?请帮助我,
我在 exists
前检测到一些奇怪的行为并将其更改为 isFile
:
File file = new File(path);
if (file.isFile()) {
Toast.makeText(getContext(), path + "/n exists", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getContext(), "Downloading", Toast.LENGTH_SHORT).show();
// ...
}
我认为移动设备在每次执行 new File()
时都会以某种方式创建一个目录。
检查这个。
.getExternalFilesDir(yourFilePath)
在您的代码中创建一个目录。所以像这样使用它。
String path = String.valueOf(getContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)+ File.separator+"Dr_Israr_Ahmad" + File.separator +filename+".mp3");
因为getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)
returns/storage/emulated/0/Android/data/<PACKAGE_ID>/files/Download
。不是我们设置Environment.DIRECTORY_DOWNLOADS
时DownloadManager
下载文件的文件夹。
尝试将您的路径设置为如下所示的示例:
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+ "/" +filename);
这里的文件名是example.pdf 然后你可以检查文件是否存在