其实广泛来说我觉得最好的做法是专门创建一个HttpDownloader(如果还有其它协议也可以创建其它的比如UDPDownloader),里面包含下载各种文件的方法和以各种协议下载的方法,然后在主类中需要的时候(比如说按下下载按钮),直接创建一个对象并且调用其中的相对应的方法就行。还有一种方法就是用switch方法,根据文件后缀的不同调用不同的方法。
可以使用很多协议来进行下载,但是通常都是http。
1.使用http协议下载文件
根据需要下载的文件的类型不同,相应的代码也不同。比如说文本需要最终现实为字符,但是mp3却需要相应的编码格式。从网上下载东西需要在Manifest文件中进行声明
1)下载文本文件
a.第一步是创建一个URL对象 url private URL url =null;
b.第二步是通过这个url对象调用openConnection()方法来创建一个HttpURLConnection对象urlConnection
可以使用很多协议来进行下载,但是通常都是http。
1.使用http协议下载文件
根据需要下载的文件的类型不同,相应的代码也不同。比如说文本需要最终现实为字符,但是mp3却需要相应的编码格式。从网上下载东西需要在Manifest文件中进行声明
1)下载文本文件
a.第一步是创建一个URL对象 url private URL url =null;
b.第二步是通过这个url对象调用openConnection()方法来创建一个HttpURLConnection对象urlConnection
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
在这个地方我犯了一个严重错误,把HttpURLConnection写成了HttpsURLConnection
c.然后是得到InputStream对象,urlConnection.getInputStream(),通常封装成BufferedReader类型,因为它有readline方法很方便,读出来的是String类型,把它赋给一个变量
c.然后是得到InputStream对象,urlConnection.getInputStream(),通常封装成BufferedReader类型,因为它有readline方法很方便,读出来的是String类型,把它赋给一个变量
BufferedReader reader = new BufferesReader(newInputStreamReader(urlConnection.getInputStream()));
d.最后才是从buffer中读取数据
e.同时必须记住的是要在AndroidManifest文件中添加Internet的使用权限:andorid.permission.INTERNET
2.将下载的文件写入SD卡内
往sd卡中写东西也需要在manifest文件中加上权限:android.permission.WRITE_EXTERNAL_STORAGE
d.最后才是从buffer中读取数据
e.同时必须记住的是要在AndroidManifest文件中添加Internet的使用权限:andorid.permission.INTERNET
2.将下载的文件写入SD卡内
往sd卡中写东西也需要在manifest文件中加上权限:android.permission.WRITE_EXTERNAL_STORAGE
要访问SD卡,必须首先得到当前设备的SD卡的目录。不同设备的SD卡可能目录不一样,通过Environment.getExternalStorageDirectory()就不用管这些问题,比较保险。
可以专门写一个类,用来进行文件在sd卡上面的读写。
首先可以定义一个字符串类型的变量,然后写一个构造方法,里面调用上面所说的方式来将sd卡的目录赋值给这个变量。
定义一个getPath方法,专门用来取得sd卡的目录。
然后定义一个判断目录上是否已经存在某个文件的方法。
分别定义一个创建文件和创建文件夹的方法。
最后定义一个将InputStream得到的数据写入SD卡的方法。