我想下载一个文件,然后将其保存到设备的 SD 卡中。我为此使用 getExternalFilesDir(),这也是 Android 开发人员组推荐的,但是当我运行我的应用程序时,在两个位置(SD 卡和内部存储器)都有为应用程序包创建的目录,但是文件保存在内部存储器中。
问问题
993 次
2 回答
0
使用此线程下载:
private class DownloadFile extends AsyncTask<String, Integer, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... Url) {
int count;
try {
URL url = new URL(Url[0]);
URLConnection connection = url.openConnection();
connection.connect();
int fileLength = connection.getContentLength();
String folder_main = "TEST1";
File f = new File(Environment.getExternalStorageDirectory(), folder_main);
if (!f.exists()) {
f.mkdirs();
}
int lenghtOfFile = connection .getContentLength();
// input stream to read file - with 8k buffer
InputStream input = new BufferedInputStream(url.openStream(),
8192);
// Save the downloaded file
OutputStream output = new FileOutputStream(f + "/"
+ movie_name_b);
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
// publishing the progress....
// After this onProgressUpdate will be called
publishProgress((int) (total * 100 / fileLength));
// writing data to file
output.write(data, 0, count);
}
// flushing output
output.flush();
// closing streams
output.close();
input.close();
}
catch (Exception e) {
// Error Log
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String file_url) {
}
}
执行 :
new DownloadFile().execute(URL_TO_DOWNLOAD);
它将在您的 SD 卡中创建一个名为 Test1 的文件夹。并且不要忘记在 Manifest 中添加权限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
于 2017-03-27T10:26:24.583 回答
0
您可以使用 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) 将文件保存在 sd 卡的下载目录中。
于 2017-03-27T10:31:07.277 回答