写一个下载文件的,发觉运行起来总是错误,我一共有三个类
这是第一个package com.siyehuazhilian.download;import java.io.IOException;import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class MainActivity extends Activity {
// 声明控件对象
private Button textButton = null;
private Button allFileButton = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // 通过id来得到对应的控件
textButton = (Button) findViewById(R.id.button_downtxt);
allFileButton = (Button) findViewById(R.id.button_downallfile); // 为button控件设置对应的监听器
textButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) { }
});
allFileButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
HttpDownFile downURLFile = new HttpDownFile();
try {
downURLFile
.downFile(
"http://wap.baidu.com/static/img/webapp/img/meinv3.jpg",
"siyehua", "123.jpg");
} catch (IOException e) {
e.printStackTrace();
}
}
}); } @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}}
android 文件下载

解决方案 »

  1.   

    这是第二个类,运行到这里的时候总是报错
    这个是错误package com.siyehuazhilian.download;import java.io.BufferedReader;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLConnection;/**
     * FileDownLoad文件下载类
     * 
     * @author Administrator
     * 
     */
    public class HttpDownFile {
    private URL url = null; /**
     * 下载文本文件
     * 
     * @param
     * @author Administrator
     * @return
     * @throws IOException
     */
    public String downTextFile(String urlStr) throws IOException {
    // 新建一个StringBuffer用来存储得到的文本
    StringBuffer stringBuffer = new StringBuffer();
    String line = null; // 得到对应的url
    url = new URL(urlStr);
    URLConnection urlConnection = url.openConnection(); // 创建一个输入流
    BufferedReader bufferedReader = new BufferedReader(
    new InputStreamReader(urlConnection.getInputStream())); while ((line = bufferedReader.readLine()) != null) {
    stringBuffer.append(line);
    } // 关闭输入流
    bufferedReader.close(); return stringBuffer.toString();
    } /**
     * 下载任意文件:0表示下载文件出错,1表示下载成功
     * 
     * @throws IOException
     */
    public int downFile(String urlStr, String filePath, String fileName)
    throws IOException {
    url = new URL(urlStr);
    HttpURLConnection urlConnection = (HttpURLConnection) url
    .openConnection();
    InputStream inputStream = urlConnection.getInputStream(); // 把下载来的文件存放到sd卡中
    SdCardFile cardFile = new SdCardFile();
    cardFile.writeDataToSdCard(filePath, fileName, inputStream); inputStream.close();
    return 1;
    }
    }
      

  2.   

    这是第三个类
    package com.siyehuazhilian.download;import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Random;import android.os.Environment;/**
     * 访问sd卡类
     * 
     * @author Administrator
     * 
     */
    public class SdCardFile {
    private String SDCARDPATH; public String getSDCARDPATH() {
    return SDCARDPATH;
    } public SdCardFile() {
    // 新建这个类时,自动初始化得到sd的文件路径
    SDCARDPATH = Environment.getExternalStorageDirectory() + "/";
    } /**
     * 在sdCard中创建文件
     * 
     * @throws IOException
     */
    public File createFile(String fileName) throws IOException {
    File file = new File(SDCARDPATH + fileName);
    file.createNewFile();
    return file;
    } /**
     * 在SdCard中创建目录
     */
    public File createDeirectory(String dirName) {
    File file = new File(SDCARDPATH + dirName);
    file.mkdirs();
    return file;
    } /**
     * 判断文件是否存在
     */
    public boolean isFileExist(String fileName) {
    File file = new File(SDCARDPATH + fileName);
    return file.exists();
    } /**
     * 把一个数据写入到sd卡中
     * 
     * @throws IOException
     * 
     */
    public File writeDataToSdCard(String filePath, String fileName,
    InputStream inputStream) throws IOException {
    if (isFileExist(fileName)) {
    fileName = fileName + new Random().nextLong();
    }
    File file = new File(SDCARDPATH + filePath + "/" + fileName); OutputStream outputStream = new FileOutputStream(file); byte[] buffer = new byte[1024];
    int len = 0;
    while ((len = inputStream.read(buffer)) != -1) {
    outputStream.write(buffer, 0, len);
    } outputStream.close();
    return file;
    }}
      

  3.   

    求助,到底是我代码有问题,还是我的url不对,如果是url不对,求给一个能下载的url...
      

  4.   


    不懂求解
    allFileButton.setOnClickListener(new OnClickListener() { @Override
    public void onClick(View v) {
    (new Thread() {//注意这一段 @Override
    public void run() {
    super.run();
    HttpDownFile downURLFile = new HttpDownFile();
    try {
    downURLFile
    .downFile(
    "http://wap.baidu.com/static/img/webapp/img/meinv3.jpg",
    "siyehua", "123.jpg");
    } catch (IOException e) {
    e.printStackTrace();
    }
    } }).start(); }
    });
      

  5.   


    不懂求解
    allFileButton.setOnClickListener(new OnClickListener() { @Override
    public void onClick(View v) {
    (new Thread() {//注意这一段 @Override
    public void run() {
    super.run();
    HttpDownFile downURLFile = new HttpDownFile();
    try {
    downURLFile
    .downFile(
    "http://wap.baidu.com/static/img/webapp/img/meinv3.jpg",
    "siyehua", "123.jpg");
    } catch (IOException e) {
    e.printStackTrace();
    }
    } }).start(); }
    });
    也就是说新建一个线程,来运行,对吗?
    那我不建立匿名内部类,新建一个类来继承OnClickListener接口.
    然后再把这个类的对象设置给button做监听器,算是在子线程运行吗?
      

  6.   

    子线程可以用Thread,Runnable,AsyncTask,在UI中更改界面的话,可以用handler
      

  7.   


     new Thread(){
             public void run() {
                       //你要处理的
           } 
       }.start();
    android 为了UI线程安全,在UI主线程不允许执行类似交互网络的比较费时的操作。