Android_文件下载

来源:互联网 发布:我太孤独 知乎 编辑:程序博客网 时间:2024/05/17 14:15
 一、 使用HTTP协议下载文件

1、文件下载步骤

1)、创建一个HttpURLConnection对象

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

2)、获得一个InputStream对象

urlConn.getInputStream();

3)、访问网络的权限

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

二、将下载的文件写入SDCard

1、得到当前SDCard卡的目录

Environment.getExternalStorageDirectory()

2、访问SDCard卡的权限

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

程序:

public class DownLoadActivity extends Activity {private Button downloadFileBtn,downloadmp3Btn;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        downloadFileBtn = (Button) findViewById(R.id.downloadfile);        downloadmp3Btn = (Button) findViewById(R.id.downloadmp3);        downloadFileBtn.setText("下载 文件");        downloadmp3Btn.setText("下载MP3");        downloadFileBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {HttpDownLoader httpDownLoader = new HttpDownLoader();String txt = httpDownLoader.downLoad("http://127.0.0.1:8080/st/myTest.txt");System.out.println(txt);}});        downloadmp3Btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {HttpDownLoader httpDownLoader = new HttpDownLoader();int downlaodResult = httpDownLoader.downLoadFile("http://127.0.0.1:8080/st/music1.mp3", "TaylorSwift/", "lovestory.mp3");System.out.println(downlaodResult);}});    }}

以下是两个帮助类

public class FileUtils {//得到当前外部存储设备的目录,得到的目录名/SDCARDprivate String SDPATH;public String getSDPATH() {return SDPATH;}public FileUtils(){SDPATH = Environment.getExternalStorageDirectory() + "/";}//在SDCard上创建文件public File createSDFile(String fileName) throws IOException{File file = new File(SDPATH + fileName);file.createNewFile();return file;}//在SDCard上创建目录public File createSDDir(String dirName){File dir = new File(SDPATH + dirName);dir.mkdir();return dir;}//判断SDCard上的文件是否存在public boolean isFileExist(String fileName){File file = new File(SDPATH + fileName);return file.exists();}//将一个InputStream里面的数据写入到SDCard卡中public File write2SDFromInput(String path,String fileName,InputStream input){File file = null;OutputStream output = null;try {createSDDir(path);file = createSDFile(path + fileName);output = new FileOutputStream(file);byte[] buffer = new byte[4 * 1024];while((input.read(buffer)) != -1){output.write(buffer);}output.flush();} catch (Exception e) {e.printStackTrace();}finally{try {output.close();} catch (Exception e2) {e2.printStackTrace();}}return file;}}

 

public class HttpDownLoader {private URL url = null;/** * 根据URL下载文件,前提是这个文件的内容是文本,函数的返回值就是文件的内容 * @param urlStr * @return */public String downLoad(String urlStr){StringBuffer stringBuffer = new StringBuffer();String line = null;BufferedReader buffer = null;try {//创建一个URL对象url = new URL(urlStr);//创建一个Http连接HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();//使用IO流读取数据buffer = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));while((line = buffer.readLine()) != null){stringBuffer.append(line);}} catch (Exception e) {e.printStackTrace();}finally{try {buffer.close();} catch (Exception e2) {e2.printStackTrace();}}System.out.println(stringBuffer.toString());return stringBuffer.toString();}//该函数返回整形 -1:代表出错 0:代表成功 1:代表文件已经存在public int downLoadFile(String urlStr,String path,String fileName){InputStream inputStream = null;try {FileUtils fileUtils = new FileUtils();if(fileUtils.isFileExist(path + fileName)){return 1;}else{inputStream = getInputStreamFromUrl(urlStr);File resultFile = fileUtils.write2SDFromInput(path, fileName, inputStream);if(resultFile == null){return -1;}}} catch (Exception e) {e.printStackTrace();return -1;}finally{try {inputStream.close();} catch (Exception e2) {e2.printStackTrace();}}return 0;}//根据URL得到一个输入流public InputStream getInputStreamFromUrl(String urlStr) throws IOException{url = new URL(urlStr);HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();InputStream inputStream = urlConn.getInputStream();return inputStream;}}
原创粉丝点击