现在的位置: 首页 > 综合 > 正文

Android 从服务器下载文件

2014年01月17日 ⁄ 综合 ⁄ 共 20225字 ⁄ 字号 评论关闭

原文出自:http://blog.csdn.net/rwyz1314/article/details/6785326

首先在电脑上配置tomcat,webapps目录下新建mp3文件夹,

截图

首先我们通过SAX解析resources.xml 获取歌曲信息。

启动 Tomcat访问一下服务器地址http://210.**.**.**:8080/mp3/resources.xml

210.**.**.**是我的IP,把这里改成自己的IP

本来下载是一个耗时的东西,需要另外开启一个线程或则service去下载,由于这里就在本人的电脑上测试

就在主线程中下载了

Info.java

  1. package rw.down;  
  2.   
  3. public class Info {  
  4.   int id;  
  5.   String nameString;  
  6. /** 
  7.  * @return the id 
  8.  */  
  9. public int getId() {  
  10.     return id;  
  11. }  
  12. /** 
  13.  * @param id the id to set 
  14.  */  
  15. public void setId(int id) {  
  16.     this.id = id;  
  17. }  
  18. /** 
  19.  * @return the nameString 
  20.  */  
  21. public String getNameString() {  
  22.     return nameString;  
  23. }  
  24. /** 
  25.  * @param nameString the nameString to set 
  26.  */  
  27. public void setNameString(String nameString) {  
  28.     this.nameString = nameString;  
  29. }  
  30. /* (non-Javadoc) 
  31.  * @see java.lang.Object#toString() 
  32.  */  
  33. @Override  
  34. public String toString() {  
  35.     return "info [id=" + id + ", nameString=" + nameString + "]";  
  36. }  
  37. }  

 

infoHandle.java

  1. package rw.down;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.xml.sax.Attributes;  
  6. import org.xml.sax.SAXException;  
  7. import org.xml.sax.helpers.DefaultHandler;  
  8.   
  9. import android.util.Log;  
  10.   
  11.   
  12.   
  13. public class infoHandle extends DefaultHandler {  
  14.   
  15.     private Info Mp3_info;  
  16.     private List<Info> List_Mp3_Infos;  
  17.     private String preString;  
  18.   
  19.     public infoHandle() {  
  20.         super();  
  21.     }  
  22.   
  23.   
  24.     public infoHandle(List<Info> list_Mp3_Infos) {  
  25.         super();  
  26.         List_Mp3_Infos = list_Mp3_Infos;  
  27.     }  
  28.   
  29.   
  30.     @Override  
  31.     public void startDocument() throws SAXException {  
  32.         // TODO Auto-generated method stub  
  33.         super.startDocument();  
  34.     }  
  35.   
  36.   
  37.     @Override  
  38.     public void startElement(String uri, String localName, String qName,  
  39.             Attributes attributes) throws SAXException {  
  40.         // TODO Auto-generated method stub  
  41.         preString=localName;  
  42.         if (preString.equals("resource")) {  
  43.             Mp3_info=new Info();  
  44.         }  
  45.         super.startElement(uri, localName, qName, attributes);  
  46.     }  
  47.   
  48.   
  49.     public void endElement(String uri, String localName, String qName)  
  50.             throws SAXException {  
  51.         // TODO Auto-generated method stub  
  52.         preString=" ";  
  53.         Log.i("endElement_localName-------->", localName);  
  54.         if (localName.equals("resource")) {  
  55.             List_Mp3_Infos.add(Mp3_info);  
  56.         }  
  57.         super.endElement(uri, localName, qName);  
  58.     }  
  59.   
  60.   
  61.   
  62.     @Override  
  63.     public void characters(char[] ch, int start, int length)  
  64.             throws SAXException {  
  65.         // TODO Auto-generated method stub  
  66.         String dateString;  
  67.         dateString=new String(ch, start, length);  
  68.         if (preString.equals("id")) {  
  69.             Mp3_info.setId(Integer.parseInt(dateString));  
  70.             Log.i("id--------->", dateString);  
  71.         }else if (preString.equals("mp3.name")) {  
  72.             Mp3_info.setNameString(dateString);  
  73.             Log.i("mp3.name--------->", dateString);  
  74.         }  
  75.           
  76.         super.characters(ch, start, length);  
  77.     }  
  78.      
  79.   
  80.       
  81.     @Override  
  82.     public void endDocument() throws SAXException {  
  83.         // TODO Auto-generated method stub  
  84.         super.endDocument();  
  85.     }  
  86.       
  87.   
  88. }  

 

DonwnFileActivity.java

  1. package rw.down;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.io.OutputStream;  
  8.   
  9. import java.net.HttpURLConnection;  
  10. import java.net.MalformedURLException;  
  11. import java.net.URL;  
  12. import java.util.ArrayList;  
  13. import java.util.Iterator;  
  14. import java.util.List;  
  15.   
  16.   
  17. import javax.xml.parsers.ParserConfigurationException;  
  18. import javax.xml.parsers.SAXParser;  
  19. import javax.xml.parsers.SAXParserFactory;  
  20.   
  21. import org.apache.http.HttpConnection;  
  22. import org.apache.http.message.BufferedHeader;  
  23. import org.xml.sax.InputSource;  
  24. import org.xml.sax.SAXException;  
  25. import org.xml.sax.XMLReader;  
  26. import org.xmlpull.v1.XmlPullParser;  
  27. import org.xmlpull.v1.XmlPullParserException;  
  28. import org.xmlpull.v1.XmlPullParserFactory;  
  29.   
  30. import android.app.Activity;  
  31. import android.app.ProgressDialog;  
  32. import android.content.Intent;  
  33. import android.content.res.AssetManager.AssetInputStream;  
  34. import android.os.Bundle;  
  35. import android.os.Environment;  
  36. import android.util.Log;  
  37. import android.view.MenuItem;  
  38. import android.view.View;  
  39. import android.view.View.OnClickListener;  
  40. import android.widget.AdapterView;  
  41. import android.widget.AdapterView.OnItemClickListener;  
  42. import android.widget.ArrayAdapter;  
  43. import android.widget.Button;  
  44. import android.widget.ListAdapter;  
  45. import android.widget.ListView;  
  46. import android.widget.SimpleAdapter;  
  47. import android.widget.TextView;  
  48. import android.widget.Toast;  
  49.   
  50. public class DownFileActivity extends Activity {  
  51.     /** Called when the activity is first created. */  
  52.     private Button button;  
  53.     private ListView listView;  
  54.     private List<String> list=new ArrayList<String>();  
  55.     private ArrayAdapter<String> adapter1;  
  56.     private List<String> musicnameList;  
  57.     private Intent service;  
  58.     @Override  
  59.     public void onCreate(Bundle savedInstanceState) {  
  60.         super.onCreate(savedInstanceState);  
  61.         setContentView(R.layout.main);  
  62.         service=new Intent(this,DownService.class);  
  63.         button=(Button) findViewById(R.id.button1);  
  64.         listView=(ListView) findViewById(R.id.listView1);  
  65.         button.setOnClickListener(new Mybutton());  
  66.     }  
  67.     class Mybutton implements OnClickListener{  
  68.   
  69.         @Override  
  70.         public void onClick(View v) {  
  71.           
  72.             // TODO Auto-generated method stub  
  73.          button.setText("刷新列表");  
  74.           musicnameList=new ArrayList<String>();  
  75.           List<Info> lInfos=parseXML();  
  76.           list.clear();  
  77.           adapter1 =new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, list);  
  78.           listView.setAdapter(adapter1);  
  79.         for (Iterator iterator = lInfos.iterator(); iterator.hasNext();) {  
  80.             Info info = (Info) iterator.next();  
  81.             musicnameList.add(info.getNameString());  
  82.             list.add(info.getId()+"  "+info.getNameString());  
  83.         }  
  84.          adapter1 =new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, list);  
  85.          listView.setAdapter(adapter1);  
  86.          listView.setOnItemClickListener(new ItemLitener());  
  87.         }  
  88.           
  89.     }  
  90.     private List<Info> parseXML()  
  91.     {  
  92.     List<Info> infos=null;  
  93.       
  94.     SAXParserFactory factory=SAXParserFactory.newInstance();  
  95.     try {  
  96.           
  97.         URL url=new URL("http://210.30.12.34:8080/mp3/resources.xml");  
  98.           
  99.         HttpURLConnection connection=(HttpURLConnection) url.openConnection();  
  100.         if (connection.getReadTimeout()==4) {  
  101.               
  102.             Toast.makeText(getApplicationContext(), "请求超时", Toast.LENGTH_LONG).show();  
  103.             return null;  
  104.         }  
  105.         InputStream inputStream2=connection.getInputStream();  
  106.         SAXParser parser=factory.newSAXParser();  
  107.         XMLReader reader=parser.getXMLReader();  
  108.         infos=new ArrayList<Info>();  
  109.         reader.setContentHandler(new infoHandle(infos));  
  110.         reader.parse(new InputSource(inputStream2));  
  111.       
  112.     } catch (ParserConfigurationException e) {  
  113.         // TODO Auto-generated catch block  
  114.         e.printStackTrace();  
  115.     } catch (SAXException e) {  
  116.         // TODO Auto-generated catch block  
  117.         e.printStackTrace();  
  118.     } catch (MalformedURLException e) {  
  119.         // TODO Auto-generated catch block  
  120.         e.printStackTrace();  
  121.     } catch (IOException e) {  
  122.         // TODO Auto-generated catch block  
  123.         e.printStackTrace();  
  124.     }   
  125.     return infos;  
  126.     }  
  127.    private class ItemLitener implements OnItemClickListener{  
  128.   
  129.     @Override  
  130.     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {  
  131.         // TODO Auto-generated method stub  
  132.           
  133.          Toast.makeText( getApplicationContext(), musicnameList.get(arg2).toString(), Toast.LENGTH_LONG).show();  
  134.          String downUrlString="http://210.30.12.34:8080/mp3/"+musicnameList.get(arg2).toString();  
  135.          String sdcardSave="DownFile";  
  136.          String filename=musicnameList.get(arg2).toString();   
  137.          OutputStream outputStream=null;  
  138.          HttpURLConnection connection;  
  139.                           /*  
  140.                           * 1.在AndroidMainfest.xml中进行权限配置  
  141.                           * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  142.                           * 取得写入SDCard的权限  
  143.                           * 2.取得SDCard的路径: Environment.getExternalStorageDirectory()  
  144.                           * 3.检查要保存的文件上是否已经存在  
  145.                           * 4.不存在,新建文件夹,新建文件  
  146.                           * 5.将input流中的信息写入SDCard  
  147.                           * 6.关闭流  
  148.                           */    
  149.         String SDcardPath=Environment.getExternalStorageDirectory()+"";  
  150.         String pathString=SDcardPath+"/"+sdcardSave+"/"+filename;  
  151.         File file=new File(pathString);  
  152.           
  153.         startService(service);  
  154.         try {  
  155.             connection = (HttpURLConnection) new URL(downUrlString).openConnection();  
  156.             InputStream inputStream=connection.getInputStream();  
  157.              if (!file.exists()) {  
  158.                    new File(SDcardPath+"/"+sdcardSave).mkdir();  
  159.                 }  
  160.              File[] filelist=new File(SDcardPath+"/"+sdcardSave).listFiles();  
  161.              for (int i = 0; i < filelist.length; i++) {  
  162.                 if (filelist[i].getName().equals(filename)) {  
  163.                     Toast.makeText(getApplicationContext(), filename+"已经存在", Toast.LENGTH_LONG).show();  
  164.                     return ;  
  165.                 }  
  166.             }  
  167.              file.createNewFile();  
  168.              System.err.println("开始下载");  
  169.           
  170.              outputStream=new FileOutputStream(file);  
  171.              byte[] buffer=new byte[4*1024];  
  172.              while ((inputStream.read(buffer))!=-1) {  
  173.                 outputStream.write(buffer);  
  174.             }  
  175.              outputStream.flush();  
  176.         } catch (IOException e) {  
  177.             // TODO Auto-generated catch block  
  178.             e.printStackTrace();  
  179.         }finally{  
  180.             try {  
  181.                 outputStream.close();  
  182.                 Toast.makeText(getApplicationContext(), "下载成功", Toast.LENGTH_LONG).show();  
  183.                 System.err.println("下载完成");  
  184.                 //progressDialog.dismiss();  
  185.             } catch (Exception e2) {  
  186.                 // TODO: handle exception     
  187.                 Toast.makeText(getApplicationContext(), "下载失败", Toast.LENGTH_LONG).show();  
  188.                 //progressDialog.cancel();  
  189.             }  
  190.               
  191.         }        
  192.     }  
  193.          
  194.    }  
  195. }  

 

DownService.java

  1. package rw.down;  
  2. import android.app.Service;  
  3. import android.content.Intent;  
  4. import android.os.IBinder;  
  5. import android.widget.Toast;  
  6.   
  7.   
  8. public class DownService extends Service {  
  9.   
  10.     @Override  
  11.     public IBinder onBind(Intent arg0) {  
  12.         // TODO Auto-generated method stub  
  13.         return null;  
  14.     }  
  15.   
  16.       
  17.     public void onCreate() {  
  18.         // TODO Auto-generated method stub  
  19.         super.onCreate();  
  20.     }  
  21.   
  22.       
  23.     public void onDestroy() {  
  24.         // TODO Auto-generated method stub  
  25.         super.onDestroy();  
  26.     }  
  27.   
  28.       
  29.     public void onStart(Intent intent, int startId) {  
  30.         // TODO Auto-generated method stub  
  31.         Toast.makeText(getApplicationContext(), "服务开始", Toast.LENGTH_LONG).show();  
  32.         super.onStart(intent, startId);  
  33.     }  
  34.      
  35. }  

 

在AndroidManifest.xml中添加两个权限

  1. <uses-permission android:name="android.permission.INTERNET"></uses-permission>  
  2.    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>  

 

和一个服务

  1. <service android:name="DownService"></service>  

效果,因为我已经运行过了,因为我已经运行过了,所以DownFile这个文件已经存在,第一次运行是回创建这个文件夹

通过ls命令 我们看见  现在文件夹里面什么也没有

 

点击我们要下载的歌曲,我现在点击Beyond.mo3

如果下载成功

如果没有找到这个歌曲,会提示下载失败

现在我们再来看看DownFile这个文件夹下面

 

抱歉!评论已关闭.