下载文件中的问题

时间:2011-11-29 10:28:13

标签: android

我开发了应用程序,我需要从url下载文件,我尝试了下面的代码,但是当我显示详细信息时,我得到0字节。

代码::

package com.playmusic;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;


public class playmusic extends Activity {

 private static String fileName = "shanesh.mp3";

 @Override
 public void onCreate(Bundle savedInstanceState) 
 {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    try {
        URL url = new URL("URl");
        HttpURLConnection c = (HttpURLConnection) url.openConnection();
        c.setRequestMethod("GET");
        c.setDoOutput(true);
        c.connect();

        String PATH = Environment.getExternalStorageDirectory()
                + "/download/";
        Log.v("log_tag", "PATH: " + PATH);
        File file = new File(PATH);
        file.mkdirs();
        File outputFile = new File(file, fileName);
        FileOutputStream fos = new FileOutputStream(outputFile);

        InputStream is = c.getInputStream();

        byte[] buffer = new byte[1024];
        int len1 = 0;
        while ((len1 = is.read(buffer)) != -1) {
            fos.write(buffer, 0, len1);
        }
        fos.close();
        is.close();
    } catch (IOException e) {
        Log.d("log_tag", "Error: " + e);
    }
    Log.v("log_tag", "Check: ");
} }

清单:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>

4 个答案:

答案 0 :(得分:1)

这是下载图像,音频,视频等任何文件的简单代码

Button start;
    //String HttpMyUrl="http://am.cdnmob.org/_/img/loader-small.gif";
    String HttpMyUrl="http://ringtones.mob.org/ringtone/RIusrm-7xATkRQlLw1o89w/1424909358/fa1b23bb5e35c8aed96b1a5aba43df3d/stefano_gambarelli_feat_pochill-land_on_mars_v2.mp3";
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       start= (Button) findViewById(R.id.startBtn);
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                DownloadManager.Request request = new DownloadManager.Request(Uri.parse(HttpMyUrl));
                request.setTitle("File Download");
                request.setDescription("File is being Downloaded...");
                request.allowScanningByMediaScanner();
                request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                String fileName = URLUtil.guessFileName(HttpMyUrl,null, MimeTypeMap.getFileExtensionFromUrl(HttpMyUrl));
                request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,fileName);
                DownloadManager manager =(DownloadManager) getApplication().getSystemService(Context.DOWNLOAD_SERVICE);
                manager.enqueue(request);
            }


        });

授予权限

答案 1 :(得分:0)

这是我用来下载文件的代码。试试这个

DefaultHttpClient http = new DefaultHttpClient();
HttpGet method = new HttpGet(YOUR URL);
HttpResponse res = http.execute(method);
InputStream responseStream = res.getEntity().getContent();

这里我使用GET方法并将参数附加到URL。

答案 2 :(得分:0)

执行以下操作。

    HttpClient httpclient = new DefaultHttpClient();

    HttpGet httpget = new HttpGet("http://www.mysite.com/file.txt");



    try {

        // Execute HTTP Get Request

        HttpResponse response = httpclient.execute(httpget);

        HttpEntity entity = response.getEntity();



        printAsString(entity.getContent()));



    } catch (IOException e) {

        Log.e(TAG, "There was an IO Stream related error", e);

    }





private void printAsString(InputStream is) {

    BufferedReader reader = new BufferedReader(new InputStreamReader(is));

    StringBuilder builder = new StringBuilder();

    String line;



    try {

        while ((line = reader.readLine()) != null) {

            Syso(line);

        }

    } catch (IOException e) {

        Log.d(TAG, "Error while converting input stream to string");

    }

    is.close();

}

答案 3 :(得分:0)

试试这个:

        int count;

    try {
            URL url = new URL("URl");
            HttpURLConnection c = (HttpURLConnection) url.openConnection();
            c.setRequestMethod("GET");
            c.setDoOutput(true);
            c.connect();



            String PATH = Environment.getExternalStorageDirectory()
                    + "/altered/";
            Log.v("log_tag", "PATH: " + PATH);
            File file = new File(PATH);
                if (!file.exists()) {
                file.mkdirs();
                 }
            File outputFile = new File(file,name);
            FileOutputStream fos = new FileOutputStream(outputFile);


            // getting file length
            int lenghtOfFile = c.getContentLength();

            InputStream is = c.getInputStream();

            byte buffer[] = new byte[1024];

            long total = 0;

            while ((count = is.read(buffer)) != -1) {

                total += count;

                // publishing the progress....
                // After this onProgressUpdate will be called
                publishProgress("" + (int) ((total * 100) / lenghtOfFile));

                fos.write(buffer);

            }
            fos.close();
            is.close();
        } catch (IOException e) {
            Log.e("log_tag", "Error: " + e);
        }