文件下载

文件下载的步骤
1.创建一个HttpURLConnection对象:
HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
2.获得一个InputStream对象
httpURLConnection .getInputStream();
3.访问(添加)网络的权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

获取SD卡的文件路径

Environment.getExternalStorageDirectory();
访问SD卡的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
package com.yanjun;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.os.Environment;

public class FileUtils {
   private String SDPATH;

   public String getSDPATH() {
     return SDPATH;
  }

   public FileUtils() {
     // 获取SD卡的路径
    SDPATH = Environment.getExternalStorageDirectory() + "/";
  }

   /**
    * 在SD卡中创建文件
    *    
    */
   public File createSDFile(String fileName) throws IOException {
    File file = new File(SDPATH + fileName);
    file.createNewFile();

     return file;
  }

   /**
    * 在SD卡上创建目录
    *    
    */
   public File createSDDir(String dirName) {
    
    File dirFile = new File(SDPATH, dirName);
    dirFile.mkdir();

     return dirFile;
  }

   /**
    * 判断SD卡的文件夹是否存在
    */
   public boolean isFileExist(String fileName) {

    File file = new File(SDPATH + fileName);
    
     return file.exists();

  }
   /**
    * 将一个InputStream数据写入到SD卡中
    *    
    */
   public File writeSDFromInput(String path,String fileName,InputStream inputStream){
    File file = null;
     //写入数据用outputStream
    OutputStream outputStream = null;
    
     try {
       //创建文件目录createSDFile()
      createSDDir(path);
       //创建文件
      file = createSDFile(path + fileName);
       //针对file对象写入数据outputStream---->4 * 1024即每4K传一次
      outputStream = new FileOutputStream(file);
       byte buffer[] = new byte[4 * 1024];
       while ((inputStream.read(buffer)) != -1) {
        outputStream.write(buffer);

      }
       //调用flush()方法,清空文件缓存
      outputStream.flush();
    } catch (Exception e) {
       // TODO: handle exception
    } finally{
       try {
         //关闭
        outputStream.close();
      } catch (IOException e) {
         // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
     return file;
    
    
  }
}
package com.yanjun;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
* @author YanJun 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文本当中的内容。 1.创建一个URL对象
*                 2.通过URL创建HttpURLConnection对象 3.得到InputStream 4.从InputStream当中读取数据
*    
*/
public class HttpDownLoad {
   private URL url = null;

   public String download(String urlString) {
     // 该方法适合下载任何形式的文本文件
     // 声明相关对象
    StringBuffer sb = new StringBuffer();
    String line = null;
    BufferedReader bufferedReader = null;

     try {
      url = new URL(urlString); // 将下载文件的地址作为参数传进去
       // 创建一个Http连接

      HttpURLConnection httpURLConnection = (HttpURLConnection) url
          .openConnection();

       // 使用IO流读取数据
      bufferedReader = new BufferedReader( new InputStreamReader(
          httpURLConnection.getInputStream()));
       while ((line = bufferedReader.readLine()) != null) {

        sb.append(line);
      }

    } catch (IOException e) {
       // TODO Auto-generated catch block
      e.printStackTrace();
    } finally {
       try {
        bufferedReader.close();
      } catch (IOException e) {
         // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }

     return sb.toString();

  }
   /**
    * 下载文件部分
    * 该函数返回整形-1---->下载文件出错
    * 该函数返回整形 0---->下载文件成功
    * 该函数返回整形 1---->文件已经存在    
    */
public int downFile(String urlStr,String path,String fileName){
  InputStream inputStream = null;
   try {
    FileUtils fileUtils = new FileUtils();
     if (fileUtils.isFileExist(path + fileName)) {
       //判断文件名是否在SD卡中已经存在
      System.out.println( "文件已经存在");

       return 1;

    } else {
      inputStream = getInputStreamFromUrl(urlStr);
      File resultFile = fileUtils.writeSDFromInput(path, fileName,
          inputStream);
       if (resultFile == null) {
         return -1;
      }
    }
  } catch (Exception e) {
     return -1;
  } finally{
     try {
      inputStream.close();
    } catch (IOException e) {
       // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
   return 0;
    
}
/**
* 根据URL得到输入流,将三个步骤封装到getInputStreamFromUrl()函数中
* @param urlStr
* @return
* @throws MalformedURLException
* @throws IOException
*/
   public InputStream getInputStreamFromUrl(String urlStr) throws MalformedURLException ,IOException{
    url = new URL(urlStr);
    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
    InputStream inputStream = httpURLConnection.getInputStream();
    
     return inputStream;
  }
}
package com.yanjun;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
   /** Called when the activity is first created. */
  Button filmButton;
  Button mp3Button;

  @Override
   public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    filmButton = (Button) findViewById(R.id.button_film);
    mp3Button = (Button) findViewById(R.id.button_mp3);
    filmButton.setOnClickListener( new filmListenner());
    mp3Button.setOnClickListener( new mp3Listenner());
  }

   class filmListenner implements OnClickListener {

     public void onClick(View v) {
       // TODO Auto-generated method stub
            HttpDownLoad    httpDownLoad = new HttpDownLoad();
            String fileString = httpDownLoad.download( "网址");
            System.out.println(fileString);
    }

  }

   class mp3Listenner implements OnClickListener {

     public void onClick(View v) {
       // TODO Auto-generated method stub
      HttpDownLoad httpDownLoad = new HttpDownLoad();
       int result = httpDownLoad.downFile( "urlStr", "path", "fileName");
      System.out.println(result);
    }

  }
}

 
 

你可能感兴趣的:(文件下载)