Android 从服务器下载文件

首先在电脑上配置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() */ @Override public 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; } @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub super.startDocument(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub preString=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 stub preString=" "; Log.i("endElement_localName-------->", localName); if (localName.equals("resource")) { List_Mp3_Infos.add(Mp3_info); } super.endElement(uri, localName, qName); } @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub String 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); } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub super.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{ @Override public 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 block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return infos; } private class ItemLitener implements OnItemClickListener{ @Override public 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 block e.printStackTrace(); }finally{ try { outputStream.close(); Toast.makeText(getApplicationContext(), "下载成功", Toast.LENGTH_LONG).show(); System.err.println("下载完成"); //progressDialog.dismiss(); } catch (Exception e2) { // TODO: handle exception Toast.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 { @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } public void onCreate() { // TODO Auto-generated method stub super.onCreate(); } public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } public void onStart(Intent intent, int startId) { // TODO Auto-generated method stub Toast.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这个文件夹下面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值