如何将下载的文件保存在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 将数据保存到手机

如何在mac上安装android studio

如何在 Android Studio 中以编程方式上传和下载 Google Drive 上的任何文件

Android studio数据如何发送IIS服务器保存SQL Server 2014数据库

如何在 Ubuntu 上安装 Android Studio?