Android:下载文件代码不起作用

我正在尝试从URL下载文件。 我的代码没有返回错误,但我看不到我应该在内部存储中下载的文件。 这是我的代码:

package com.example.downloadfile; import java.io.BufferedOutputStream; 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; import android.widget.TextView; public class DownloadFile extends Activity { private static String fileName = "al.jpg"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView tv = new TextView(this); tv.setText("This is download file program... "); try { URL url = new URL("http://www.fullissue.com/wp-content/uploads/2010/12/Adam-Lambert.jpg"); HttpURLConnection c = (HttpURLConnection) url.openConnection(); c.setRequestMethod("GET"); c.setDoOutput(true); c.connect(); String PATH = Environment.getDataDirectory() + "/"; tv.append("\nPath > " + PATH); 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: "); tv.append("\nAnother append!"); this.setContentView(tv); } } 

我是java和android dev的新手,任何答案都会非常感谢,谢谢!


呦! 我使用了ff。 代码而不是。 这对我有用。 感谢你的帮助!

 private static String fileName = "beautiful_galaxy - tarantula.jpg"; private static String fileURL = "http://sofzh.miximages.com/java/tarantula2_hst_big.jpg"; try { File root = Environment.getExternalStorageDirectory(); URL u = new URL(fileURL); HttpURLConnection c = (HttpURLConnection) u.openConnection(); c.setRequestMethod("GET"); c.setDoOutput(true); c.connect(); int lenghtOfFile = c.getContentLength(); FileOutputStream f = new FileOutputStream(new File(root + "/download/", fileName)); InputStream in = c.getInputStream(); byte[] buffer = new byte[1024]; int len1 = 0; long total = 0; while ((len1 = in.read(buffer)) > 0) { total += len1; //total = total + len1 //publishProgress("" + (int)((total*100)/lenghtOfFile)); f.write(buffer, 0, len1); } f.close(); } catch (Exception e) { Log.d("Downloader", e.getMessage()); } 

如果你正在下载文件到Sdcard然后确保你的SD卡已经安装,代码将下载文件到SD卡,如果仍然有问题让我知道。

尝试{
             URL url =新URL(提供任何URL);
             HttpURLConnection c =(HttpURLConnection)url.openConnection();
             c.setRequestMethod( “GET”);
             c.setDoOutput(真);
             c.connect();

             String PATH = Environment.getExternalStorageDirectory()
                     +“/ download /”;
             Log.v(LOG_TAG,“PATH:”+ PATH);
            文件文件=新文件(PATH);
             file.mkdirs();

             String fileName =“Test.mp3”;


            文件outputFile = new File(file,fileName);
             FileOutputStream fos = new FileOutputStream(outputFile);

             InputStream = 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,“错误:”+ e);
             Toast.makeText(myApp,“error”+ e.toString(),Toast.LENGTH_LONG)
                     。节目();

         }


祝你好运:)

我看到了这个话题 ,那个人说你应该使用Apache HTTP客户端而不是java 客户端

以下是教程中的代码片段:

 HttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet("http://localhost/"); HttpResponse response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream instream = entity.getContent(); int l; byte[] tmp = new byte[2048]; while ((l = instream.read(tmp)) != -1) { } } 

非常肯定(就像@dmon所说的那样)你不能以这种方式写入数据目录。 你想要:

  1. 使用Environment.getDownloadCacheDirectory ()Environment.getExternalStorageDirectory () 。 查看http://developer.android.com/reference/android/os/Environment.html#getDataDirectory%28%29的javadoc。
  2. 使用URLConnection()很好:这是标准的java,并且工作得很好。
  3. android日志说什么?

检查Manifest文件中的以下权限:

   

您现在将拥有NetworkOnMainThreadException。 看看日志猫。 将您的互联网代码放在asynctask或线程中。

要下载文件,我使用以下代码:

 public boolean DownloadFile(String url, File outputFile) { try { URL u = new URL(url); URLConnection conn = u.openConnection(); int contentLength = conn.getContentLength(); DataInputStream stream = new DataInputStream(u.openStream()); byte[] buffer = new byte[contentLength]; stream.readFully(buffer); stream.close(); DataOutputStream fos = new DataOutputStream(new FileOutputStream(outputFile)); fos.write(buffer); fos.flush(); fos.close(); } catch(FileNotFoundException e) { return false; } catch (IOException e) { return false; } return true; }