Android 从服务器下载文件
来源:互联网 发布:怎样知自己有没有钩虫 编辑:程序博客网 时间:2024/05/21 08:50
首先在电脑上配置tomcat,webapps目录下新建mp3文件夹,
截图
首先我们通过SAX解析resources.xml 获取歌曲信息。
启动 Tomcat访问一下服务器地址http://210.**.**.**:8080/mp3/resources.xml
210.**.**.**是我的IP,把这里改成自己的IP
本来下载是一个耗时的东西,需要另外开启一个线程或则service去下载,由于这里就在本人的电脑上测试
就在主线程中下载了
Info.java
package rw.down;public class Info { int id; String nameString;/** * @return the id */public int getId() {return id;}/** * @param id the id to set */public void setId(int id) {this.id = id;}/** * @return the nameString */public String getNameString() {return nameString;}/** * @param nameString the nameString to set */public void setNameString(String nameString) {this.nameString = nameString;}/* (non-Javadoc) * @see java.lang.Object#toString() */@Overridepublic String toString() {return "info [id=" + id + ", nameString=" + nameString + "]";}}
infoHandle.java
package rw.down;import java.util.List;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;import android.util.Log;public class infoHandle extends DefaultHandler {private Info Mp3_info; private List<Info> List_Mp3_Infos; private String preString;public infoHandle() {super();}public infoHandle(List<Info> list_Mp3_Infos) {super();List_Mp3_Infos = list_Mp3_Infos;}@Overridepublic void startDocument() throws SAXException {// TODO Auto-generated method stubsuper.startDocument();}@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {// TODO Auto-generated method stubpreString=localName;if (preString.equals("resource")) {Mp3_info=new Info();}super.startElement(uri, localName, qName, attributes);}public void endElement(String uri, String localName, String qName)throws SAXException {// TODO Auto-generated method stubpreString=" ";Log.i("endElement_localName-------->", localName);if (localName.equals("resource")) {List_Mp3_Infos.add(Mp3_info);}super.endElement(uri, localName, qName);}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {// TODO Auto-generated method stubString dateString;dateString=new String(ch, start, length);if (preString.equals("id")) {Mp3_info.setId(Integer.parseInt(dateString));Log.i("id--------->", dateString);}else if (preString.equals("mp3.name")) {Mp3_info.setNameString(dateString);Log.i("mp3.name--------->", dateString);}super.characters(ch, start, length);} @Overridepublic void endDocument() throws SAXException {// TODO Auto-generated method stubsuper.endDocument();}}
DonwnFileActivity.java
package rw.down;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.apache.http.HttpConnection;import org.apache.http.message.BufferedHeader;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import org.xml.sax.XMLReader;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import android.app.Activity;import android.app.ProgressDialog;import android.content.Intent;import android.content.res.AssetManager.AssetInputStream;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.Toast;public class DownFileActivity extends Activity { /** Called when the activity is first created. */private Button button;private ListView listView;private List<String> list=new ArrayList<String>();private ArrayAdapter<String> adapter1;private List<String> musicnameList; private Intent service;@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); service=new Intent(this,DownService.class); button=(Button) findViewById(R.id.button1); listView=(ListView) findViewById(R.id.listView1); button.setOnClickListener(new Mybutton()); } class Mybutton implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stub button.setText("刷新列表"); musicnameList=new ArrayList<String>(); List<Info> lInfos=parseXML(); list.clear(); adapter1 =new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, list); listView.setAdapter(adapter1);for (Iterator iterator = lInfos.iterator(); iterator.hasNext();) {Info info = (Info) iterator.next();musicnameList.add(info.getNameString()); list.add(info.getId()+" "+info.getNameString());} adapter1 =new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, list); listView.setAdapter(adapter1); listView.setOnItemClickListener(new ItemLitener());} } private List<Info> parseXML() { List<Info> infos=null; SAXParserFactory factory=SAXParserFactory.newInstance(); try { URL url=new URL("http://210.30.12.34:8080/mp3/resources.xml"); HttpURLConnection connection=(HttpURLConnection) url.openConnection(); if (connection.getReadTimeout()==4) { Toast.makeText(getApplicationContext(), "请求超时", Toast.LENGTH_LONG).show();return null;} InputStream inputStream2=connection.getInputStream();SAXParser parser=factory.newSAXParser();XMLReader reader=parser.getXMLReader();infos=new ArrayList<Info>();reader.setContentHandler(new infoHandle(infos));reader.parse(new InputSource(inputStream2));} catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} return infos; } private class ItemLitener implements OnItemClickListener{@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {// TODO Auto-generated method stub Toast.makeText( getApplicationContext(), musicnameList.get(arg2).toString(), Toast.LENGTH_LONG).show(); String downUrlString="http://210.30.12.34:8080/mp3/"+musicnameList.get(arg2).toString(); String sdcardSave="DownFile"; String filename=musicnameList.get(arg2).toString(); OutputStream outputStream=null; HttpURLConnection connection; /* * 1.在AndroidMainfest.xml中进行权限配置 * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> * 取得写入SDCard的权限 * 2.取得SDCard的路径: Environment.getExternalStorageDirectory() * 3.检查要保存的文件上是否已经存在 * 4.不存在,新建文件夹,新建文件 * 5.将input流中的信息写入SDCard * 6.关闭流 */ String SDcardPath=Environment.getExternalStorageDirectory()+""; String pathString=SDcardPath+"/"+sdcardSave+"/"+filename; File file=new File(pathString); startService(service); try { connection = (HttpURLConnection) new URL(downUrlString).openConnection();InputStream inputStream=connection.getInputStream(); if (!file.exists()) { new File(SDcardPath+"/"+sdcardSave).mkdir();} File[] filelist=new File(SDcardPath+"/"+sdcardSave).listFiles(); for (int i = 0; i < filelist.length; i++) {if (filelist[i].getName().equals(filename)) {Toast.makeText(getApplicationContext(), filename+"已经存在", Toast.LENGTH_LONG).show();return ;}} file.createNewFile(); System.err.println("开始下载"); outputStream=new FileOutputStream(file); byte[] buffer=new byte[4*1024]; while ((inputStream.read(buffer))!=-1) {outputStream.write(buffer);} outputStream.flush();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {outputStream.close();Toast.makeText(getApplicationContext(), "下载成功", Toast.LENGTH_LONG).show();System.err.println("下载完成");//progressDialog.dismiss();} catch (Exception e2) {// TODO: handle exceptionToast.makeText(getApplicationContext(), "下载失败", Toast.LENGTH_LONG).show();//progressDialog.cancel();}} } }}
DownService.java
package rw.down;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.widget.Toast;public class DownService extends Service {@Overridepublic IBinder onBind(Intent arg0) {// TODO Auto-generated method stubreturn null;}public void onCreate() {// TODO Auto-generated method stubsuper.onCreate();}public void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();}public void onStart(Intent intent, int startId) {// TODO Auto-generated method stubToast.makeText(getApplicationContext(), "服务开始", Toast.LENGTH_LONG).show();super.onStart(intent, startId);} }
在AndroidManifest.xml中添加两个权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
和一个服务
<service android:name="DownService"></service>
效果,因为我已经运行过了,因为我已经运行过了,所以DownFile这个文件已经存在,第一次运行是回创建这个文件夹
通过ls命令 我们看见 现在文件夹里面什么也没有
点击我们要下载的歌曲,我现在点击Beyond.mo3
如果下载成功
如果没有找到这个歌曲,会提示下载失败
现在我们再来看看DownFile这个文件夹下面
- Android 从服务器下载文件
- Android 从服务器下载文件
- Android 从服务器下载文件
- Android从服务器下载文件
- Android连接服务器,从服务器获取数据,以及从服务器下载文件(单,多线程)
- android从服务器下载文件(php+apache+win7+MySql)
- Android 从服务器下载文件保存到sd卡
- 从FTP服务器下载文件
- php从服务器下载文件
- 从linux服务器下载文件
- VC 从服务器下载文件
- 从ftp服务器下载文件
- IOS 从服务器下载文件
- 从服务器下载word文件
- Servlet从服务器下载文件
- 从远程服务器下载文件
- java从服务器下载文件
- C#从服务器下载文件
- A Task Process hdu 3433
- 黑莓开发学习Trip
- 如何很好的回答进程与线程的区别
- C++中的引用
- 读内核积累 C语言 相关 特殊使用
- Android 从服务器下载文件
- 浮点数的比较
- Messagebox.show() 常用参数的讨论
- 新概念英语 lesson 11
- struts2
- 用js模拟java的StringBuffer, 主要提高组装字符窜的效率
- 11.09.11 ~ 11.09.17
- LED,我的归宿!
- Object-C学习笔记十-----内存管理