1、创建一个HttpURLConnection对象
HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();
2、获得一个InputStream对象
urlConn.getInputStream();
3、访问网络的权限需要在AndroidManifest.xml中加入
android.permission.INTERNET
private URL url=null;
/*根据URL下载文件,前提是这个文件中的内容是文本,
* 1、创建一个URL对象
* 2、通过URL对象,创建一个HttpURLConnection对象
* 3、得到InputStream
* 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 urlConnection=(HttpURLConnection)url.openConnection();
//使用IO流读取数据
buffer = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
while((line=buffer.readLine())!=null) {
sb.append(line);
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try{
buffer.close();
} catch(Exception e){
e.printStackTrace();
}
}
return sb.toString();
}
访问SD卡
得到当前设备SD卡的目录
Environment.getExternalStorageDirectory();
访问SD卡的权限
android.permission.WRITE_EXTERNAL_STORAGE
项目结构
package com.example.utils的代码
package com.example.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;
import java.net.URLConnection;
import javax.net.ssl.HttpsURLConnection;
public class HttpDownLoader {
private URL url=null;
/*根据URL下载文件,前提是这个文件中的内容是文本,
* 1、创建一个URL对象
* 2、通过URL对象,创建一个HttpURLConnection对象
* 3、得到InputStream
* 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 (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try{
buffer.close();
} catch(Exception e){
e.printStackTrace();
}
}
return sb.toString();
}
/*
* 根据URL得到输入流
* @param urlStr
* @return
*
* @throws IOException
*/
public InputStream getInputStreamxFromUrl(String urlStr)
throws MalformedURLException,IOException{
url=new URL(urlStr);
HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();
InputStream inputStream = urlConn.getInputStream();
return inputStream;
}
/*
* 该函数返回整形-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=getInputStreamxFromUrl(urlStr);
File resultFile = fileUtils.write2SDFromInput(path, fileName, inputStream);
if(resultFile==null){
return -1;
}
}
} catch(Exception e){
e.printStackTrace();
} finally{
try {
inputStream.close();
} catch(Exception e){
e.printStackTrace();
}
}
return 0;
}
}
package com.example.download的代码
package com.example.download;
import com.example.utils.HttpDownLoader;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Menu;
import android.widget.Button;
public class Download extends Activity {
private Button downloadTxtButton;
private Button downloadMp3Button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
downloadMp3Button=(Button)findViewById(R.id.downloadMp3);
downloadTxtButton=(Button)findViewById(R.id.downloadTxt);
downloadMp3Button.setOnClickListener(new DownloadMp3Listener());
downloadTxtButton.setOnClickListener(new DownloadTxtListener());
}
class DownloadTxtListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
HttpDownLoader httpDownLoader = new HttpDownLoader();
String lrc=httpDownLoader.download("http://172.18.58.175:8080/myWebSite/test.txt");
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://172.18.58.175:8080/myWebSite/ss.txt", "voa/", "a1.mp3");
System.out.println(result);
}
}
@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;
}
}
package com.example.utils的代码
package com.example.utils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import javax.security.auth.PrivateCredentialPermission;
import android.os.Environment;
public class FileUtils {
private String SDPATH;
public String getSDPATH(){
return SDPATH;
}
public FileUtils() {
//得到当前外部存储设备目录
SDPATH = Environment.getExternalStorageDirectory() + "/";
}
/**
* 将一个InputStream里边的数据写入SD卡中
* */
public File write2SDFromInput(String path, String fileName, InputStream input) {
File file = null;
OutputStream output = null;
try {
createSDDir(path); //在SD卡中先创建的目录
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 (IOException e) {
// TODO: handle exception
e.printStackTrace();
} finally {
try {
output.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return file;
}
/**
* 在SD卡上创建文件
* @throws IOException
* */
private File createSDFile(String fileName) throws IOException {
// TODO Auto-generated method stub
File file = new File(SDPATH + fileName);
file.createNewFile();
return file;
}
/**
* 在SD卡上创建目录
* @param dirName*/
private File createSDDir(String dirName) {
// TODO Auto-generated method stub
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();
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.download"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.download.Download"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/downloadTxt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="下载文本文件"
/>
<Button
android:id="@+id/downloadMp3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="下载MP3文件 "
/>
</LinearLayout>
java.io.FileNotFoundException: http://172.18.58.175:8080/myWebSite/希望の宇宙の试吼-fantas.mp3
at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:1162)
...错误
不知道为啥
解决方案:可能是文件太大了,把mp3文件改为ss.txt的小文件就解决了。