以后用到的时候就可以把下面两个文件拷贝到项目的包里
比如我要下载http://www.shenjoy.com/mp3/music.mp3 存放到sd卡的声音文件夹内 并且命名为shenjoymusic.mp3
httpDownloader.download("http://www.shenjoy.com/mp3/music.mp3", "声音/", "shenjoymusic.mp3");
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下面写出封装好的HttpDownloader类
public class HttpDownloader {
private URL url = null;
public int download(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(inputStream,path,fileName);
if (resultFile == null)
return -1; //下载文件出错
else return 0; //下载文件成功
}
} catch (Exception e) {
e.printStackTrace();
return -1;
} finally {
try {
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public InputStream getInputStreamFromUrl(String urlStr) throws MalformedURLException, IOException {
InputStream inputStream=null;
try{
// 创建一个URL对象
url = new URL(urlStr);
// 创建一个Http连接
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
// 使用IO流读取数据
inputStream = urlConn.getInputStream();
return inputStream;
}
catch (Exception e) {
e.printStackTrace();
return null;
}
finally {
inputStream.close();
}
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
接下来是FileUtils类
public class FileUtils {
private String SDPATH;
public String getSDPATH() {
return SDPATH;
}
public FileUtils() {
//得到当前外部存储设备的目录
// /SDCARD
SDPATH = Environment.getExternalStorageDirectory() + "/";
}
/**
* 在SD卡上创建目录
*
* @param dirName
*/
public File creatSDDir(String dirName) {
File file = new File(SDPATH + dirName);
file.mkdirs();
return file;
}
/**
* 在SD卡上创建文件
*
* @throws IOException
*/
public File creatSDFile(String fileName) throws IOException {
File file = new File(SDPATH + fileName);
file.createNewFile();
return file;
}
/**
* 判断SD卡上的文件夹是否存在
*/
public boolean isFileExist(String fileName){
File file = new File(SDPATH + fileName);
return file.exists();
}
/**
* 将一个InputStream里面的数据写入到SD卡中
*/
public File write2SDFromInput(InputStream inputStream,String path,String fileName){
File file = null;
OutputStream outputStream = null;
try{
creatSDDir(path);
file = creatSDFile(path + fileName);
outputStream = new FileOutputStream(file);
byte buffer [] = new byte[4 * 1024];
while((inputStream.read(buffer)) != -1){
outputStream.write(buffer);
}
outputStream.flush();
}
catch(Exception e){
e.printStackTrace();
}
finally{
try{
outputStream.close();
}
catch(Exception e){
e.printStackTrace();
}
}
return file;
}
}