如果文件名包含空格或%20,如何下载文件

时间:2017-05-26 05:50:27

标签: android

我可以使用URL连接下载文件,但如果我的文件名包含空格或%20,那么我无法下载文件。

这是我的代码..

class DownloadFileFromURL extends AsyncTask<String, String, String> {

    /**
     * Before starting background thread Show Progress Bar Dialog
     */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        pDialog = new Dialog(HomeActivity.this, R.style.startdialog);
        pDialog.setContentView(R.layout.dialog_downloader);
        progressCircle = (DonutProgress) pDialog.findViewById(R.id.downloadProgress);
        progressCircle.setFinishedStrokeColor(getResources().getColor(R.color.colorPrimary));
        progressCircle.setUnfinishedStrokeColor(getResources().getColor(R.color.hint_color));
        progressCircle.setTextColor(getResources().getColor(R.color.colorPrimary));
        progressCircle.setProgress(0);

        pDialog.setCanceledOnTouchOutside(false);
        pDialog.show();

    }

    /**
     * Downloading file in background thread
     */
    @Override
    protected String doInBackground(String... f_url) {
        int count;
        try {
            URL url = new URL(f_url[0]);
            URLConnection conection = url.openConnection();
            conection.connect();

            // this will be useful so that you can show a tipical 0-100%
            // progress bar
            int lenghtOfFile = conection.getContentLength();

            // download the file
            InputStream input = new BufferedInputStream(url.openStream(),
                    8192);

            // Output stream
            OutputStream output = new FileOutputStream(mediapath + f_url[0].substring(f_url[0].lastIndexOf("/") + 1));

            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) / lenghtOfFile));

                // writing data to file
                output.write(data, 0, count);
            }

            // flushing output
            output.flush();

            // closing streams
            output.close();
            input.close();

        } catch (Exception e) {
            Log.e("Error: ", e.getMessage());
        }

        return null;



    }

    /**
     * Updating progress bar
     */
    protected void onProgressUpdate(String... progress) {
        // setting progress percentage
        progressCircle.setProgress(Integer.parseInt(progress[0]));
    }

    /**
     * After completing background task Dismiss the progress dialog
     **/
    @Override
    protected void onPostExecute(String file_url) {
        // dismiss the dialog after the file was downloaded
        pDialog.dismiss();

    }

}

Asynk任务执行

new DownloadFileFromURL().execute(urlString);

3 个答案:

答案 0 :(得分:0)

请尝试以下代码

 try {
    String urlString = "url string";
    URL url = new URL(urlString.replaceAll(" ", "%20"));

    URLConnection connection = url.openConnection();
    connection.setRequestProperty("User-agent", "Mozilla/4.0");
    connection.connect();



} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

答案 1 :(得分:0)

你从哪里得到f_url?似乎它是畸形的。您必须将f_urlprotocolhostpath分开,并使用

编码path
String encodedPath = Uri.encode(path);

并用

建立uri
URL url = new URL(protocol, host, encodedPath)

或与其他适当的URL class constructor

答案 2 :(得分:0)

您可以使用replaceAll("","")方法,然后再次尝试,如下所示:

String replaceURL=s1.replaceAll(" ","%20");