文件下载步骤

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();
	}
}


AndroidManifest.xml
<?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>


main.xml
<?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的小文件就解决了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值