当前位置: 代码迷 >> Android >> android下载文件封存到sd卡
  详细解决方案

android下载文件封存到sd卡

热度:27   发布时间:2016-05-01 10:59:44.0
android下载文件保存到sd卡

准备:

package mars.utils;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() {		//得到当前外部存储设备的目录		// /SDCARD		SDPATH = Environment.getExternalStorageDirectory() + "/";	}	/**	 * 在SD卡上创建文件	 * 	 * @throws IOException	 */	public File creatSDFile(String fileName) throws IOException {		File file = new File(SDPATH + fileName);		file.createNewFile();		return file;	}		/**	 * 在SD卡上创建目录	 * 	 * @param dirName	 */	public File creatSDDir(String dirName) {		File dir = new File(SDPATH + dirName);		dir.mkdirs();		return dir;	}	/**	 * 判断SD卡上的文件夹是否存在	 */	public boolean isFileExist(String fileName){		File file = new File(SDPATH + fileName);		return file.exists();	}		/**	 * 将一个InputStream里面的数据写入到SD卡中	 */	public File write2SDFromInput(String path,String fileName,InputStream input){		File file = null;		OutputStream output = null;		try{			creatSDDir(path);			file = creatSDFile(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 e){				e.printStackTrace();			}		}		return file;	}}

?封装:

package mars.utils;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;public class HttpDownloader {	private URL url = null;	/**	 * 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件当中的内容	 * 1.创建一个URL对象	 * 2.通过URL对象,创建一个HttpURLConnection对象	 * 3.得到InputStram	 * 4.从InputStream当中读取数据	 * @param urlStr	 * @return	 */	public String download(String urlStr) {		StringBuffer sb = new StringBuffer();		String line = null;		BufferedReader buffer = null;		try {			// 创建一个URL对象			url = new URL(urlStr);			// 创建一个Http连接			HttpURLConnection urlConn = (HttpURLConnection) url					.openConnection();			// 使用IO流读取数据			buffer = new BufferedReader(new InputStreamReader(urlConn					.getInputStream()));			while ((line = buffer.readLine()) != null) {				sb.append(line);			}		} catch (Exception e) {			e.printStackTrace();		} finally {			try {				buffer.close();			} catch (Exception e) {				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)) {				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 e) {				e.printStackTrace();			}		}		return 0;	}	/**	 * 根据URL得到输入流	 * 	 * @param urlStr	 * @return	 * @throws MalformedURLException	 * @throws IOException	 */	public InputStream getInputStreamFromUrl(String urlStr)			throws MalformedURLException, IOException {		url = new URL(urlStr);		HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();		InputStream inputStream = urlConn.getInputStream();		return inputStream;	}}

?测试:

package mars.download;import mars.utils.HttpDownloader;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class Download extends Activity {    /** Called when the activity is first created. */    private Button downloadTxtButton;    private Button downloadMp3Button;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        downloadTxtButton = (Button)findViewById(R.id.downloadTxt);        downloadTxtButton.setOnClickListener(new DownloadTxtListener());        downloadMp3Button = (Button)findViewById(R.id.downloadMp3);        downloadMp3Button.setOnClickListener(new DownloadMp3Listener());    }        class DownloadTxtListener implements OnClickListener{		@Override		public void onClick(View v) {			HttpDownloader httpDownloader = new HttpDownloader();			String lrc = httpDownloader.download("http://192.168.1.107:8080/voa1500/a1.lrc");			System.out.println(lrc);		}    	    }    class DownloadMp3Listener implements OnClickListener{		@Override		public void onClick(View v) {			// TODO Auto-generated method stub			HttpDownloader httpDownloader = new HttpDownloader();			int result = httpDownloader.downFile("http://192.168.1.107:8080/voa1500/a1.mp3", "voa/", "a1.mp3");			System.out.println(result);		}    	    }    }

?注意:要在AndroidMainfest.xml文件中加入访问网络和访问sd卡的权限加上!

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

?

?

  相关解决方案