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这个文件夹下面

 

原创粉丝点击