如何将下载的文件保存在android studio的内部存储中?
Posted
技术标签:
【中文标题】如何将下载的文件保存在android studio的内部存储中?【英文标题】:How to save downloaded file in internal storage in android studio? 【发布时间】:2019-03-05 06:28:54 【问题描述】:我的应用程序中有一个下载按钮。当我按下下载按钮时,它会从提供的 url 下载音频文件。但问题是我想将文件保存在名为“DownloadTestFolder”的内部存储文件夹中,它显示一个错误。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:gravity="center"
android:layout_
android:layout_>
<Button
android:layout_
android:layout_
android:text="Download"
android:onClick="Download"
android:id="@+id/download"/>
</LinearLayout>
public class DownloadTest extends Activity
DownloadManager downloadManager;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.download_test);
public void Download(View view)
downloadManager=(DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE);
Uri uri=Uri.parse("My Url");
DownloadManager.Request request = new DownloadManager.Request(uri);
try
request.setDestinationInExternalPublicDir(getFilesDir()+"/DownloadTestFolder","/");
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
Long reference = downloadManager.enqueue(request);
catch (Exception e)
/* Error
【问题讨论】:
检查这个它的好库 - github.com/lingochamp/FileDownloader 是否有必要标记“javascript”? 【参考方案1】:DownloadManager
只能下载到external storage
,需要自己实现下载管理器。
使用此方法保存文件:
// DownloadFile AsyncTask
private class DownloadFile extends AsyncTask<String, Void, Bitmap>
@Override
protected void onPreExecute()
super.onPreExecute();
@Override
protected Bitmap doInBackground(String... URL)
String imageURL = URL[0];
Bitmap bitmap = null;
try
// Download Image from URL
InputStream input = new java.net.URL(URL).openStream();
// Decode Bitmap
bitmap = BitmapFactory.decodeStream(input);
catch (Exception e)
e.printStackTrace();
return bitmap;
@Override
protected void onPostExecute(Bitmap result)
if (result != null)
File dir = new File(mContext.getFilesDir(), "MyImages");
if(!dir.exists())
dir.mkdir();
File destination = new File(dir, "image.jpg");
try
destination.createNewFile();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
result.compress(Bitmap.CompressFormat.PNG, 0 /*ignored for PNG*/, bos);
byte[] bitmapdata = bos.toByteArray();
FileOutputStream fos = new FileOutputStream(destination);
fos.write(bitmapdata);
fos.flush();
fos.close();
selectedFile = destination;
catch (IOException e)
e.printStackTrace();
用法:
new DownloadFile().execute("url_here");
注意:我已经为图像类型文件添加了代码
【讨论】:
问题特地问如何下载到内部存储。 context.getFilesDir() 表示内部存储,更新答案 什么是可执行文件,不是图片,如何解码。【参考方案2】:你可以试试这个:
ContextWrapper contextWrapper = new ContextWrapper(getApplicationContext());
File directory = contextWrapper.getDir(getFilesDir().getName(), Context.MODE_PRIVATE);
File file = new File(directory,”fileName”);
String data = “TEST DATA”;
FileOutputStream fos = new FileOutputStream(“fileName”, true); // save
fos.write(data.getBytes());
fos.close();
这会将文件写入设备的内部存储 (/data/user/0/com.yourapp/)
【讨论】:
要下载的火的url在哪里以上是关于如何将下载的文件保存在android studio的内部存储中?的主要内容,如果未能解决你的问题,请参考以下文章
如何将xml文件保存在我想要的目录中(android studio)[关闭]
如何在 Android Studio 中以编程方式上传和下载 Google Drive 上的任何文件