0

我想下载一个文件,然后将其保存到设备的 SD 卡中。我为此使用 getExternalFilesDir(),这也是 Android 开发人员组推荐的,但是当我运行我的应用程序时,在两个位置(SD 卡和内部存储器)都有为应用程序包创建的目录,但是文件保存在内部存储器中。

4

2 回答 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 回答