服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - Android实现简单的文件下载与上传

Android实现简单的文件下载与上传

2022-09-06 18:14pigdreams Android

今天小编就为大家分享一篇关于Android实现简单的文件下载与上传,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

文件下载

  1. /** 
  2.  * 下载服务 IntentService 
  3.  * 生命周期: 
  4.  * 1>当第一次启动IntentService时,Android容器 
  5.  *  将会创建IntentService对象。 
  6.  * 2>IntentService将会在工作线程中轮循消息队列, 
  7.  *  执行每个消息对象中的业务逻辑。 
  8.  * 3>如果消息队列中依然有消息,则继续执行, 
  9.  *  如果消息队列中的消息已经执行完毕, 
  10.  *  IntentService将会自动销毁,执行onDestroy方法。 
  11.  */ 
  12. public class DownloadService extends IntentService{ 
  13.   private static final int NOTIFICATION_ID = 100; 
  14.   public DownloadService(){ 
  15.     super("download"); 
  16.   } 
  17.   public DownloadService(String name) { 
  18.     super(name); 
  19.   } 
  20.   /** 
  21.    * 该方法中的代码将会在工作线程中执行 
  22.    * 每当调用startService启动IntentService后, 
  23.    * IntentService将会把OnHandlerIntent中的 
  24.    * 业务逻辑放入消息队列等待执行。 
  25.    * 当工作线程轮循到该消息对象时,将会 
  26.    * 执行该方法。 
  27.    */ 
  28.   protected void onHandleIntent(Intent intent) { 
  29.     //发送Http请求 执行下载业务 
  30.     //1. 获取音乐的路径 
  31.     String url=intent.getStringExtra("url"); 
  32.     String bit=intent.getStringExtra("bit"); 
  33.     String title=intent.getStringExtra("title"); 
  34.     //2. 构建File对象,用于保存音乐文件 
  35.     //   /mnt/sdcard/Music/_64/歌名.mp3 
  36.     File targetFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC),"_"+bit+"/"+title+".mp3" );          
  37.     if(targetFile.exists()){ 
  38.       Log.i("info""音乐已存在"); 
  39.       return
  40.     } 
  41.     if(!targetFile.getParentFile().exists()){ 
  42.       targetFile.getParentFile().mkdirs(); 
  43.     } 
  44.     try { 
  45.       sendNotification("音乐开始下载""音乐开始下载"); 
  46.       //3. 发送Http请求,获取InputStream 
  47.       InputStream is = HttpUtils.getInputStream(url); 
  48.       //4. 边读取边保存到File对象中 
  49.       FileOutputStream fos = new FileOutputStream(targetFile); 
  50.       byte[] buffer = new byte[1024*100]; 
  51.       int length=0; 
  52.       int current = 0; 
  53.       int total = Integer.parseInt(intent.getStringExtra("total")); 
  54.       while((length=is.read(buffer)) != -1){ 
  55.         fos.write(buffer, 0, length); 
  56.         fos.flush(); 
  57.         current += length; 
  58.         //通知下载的进度 
  59.         double progress = Math.floor(1000.0*current/total)/10; 
  60.         sendNotification("音乐开始下载""下载进度:"+progress+"%"); 
  61.       } 
  62.       //5. 文件下载完成 
  63.       fos.close(); 
  64.       cancelNotification(); //重新出现滚动消息 
  65.       sendNotification("音乐下载完成""音乐下载完毕"); 
  66.     } catch (Exception e) { 
  67.       e.printStackTrace(); 
  68.     } 
  69.   } 
  70.   /** 
  71.    * 发通知 
  72.    */ 
  73.   public void sendNotification(String ticker, String text){ 
  74.     NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
  75.     Notification.Builder builder = new Notification.Builder(this); 
  76.     builder.setSmallIcon(R.drawable.ic_launcher) 
  77.       .setContentTitle("音乐下载"
  78.       .setContentText(text) 
  79.       .setTicker(ticker); 
  80.     Notification n = builder.build(); 
  81.     manager.notify(NOTIFICATION_ID, n); 
  82.   } 
  83.   /** 
  84.    * 取消通知 
  85.    */ 
  86.   public void cancelNotification(){ 
  87.     NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
  88.     manager.cancel(NOTIFICATION_ID); 
  89.   }    

文件上传

  1. /** 
  2.    * 上传文件 
  3.    * @param uploadFile 
  4.    */ 
  5.   private void uploadFile(final File uploadFile) { 
  6.     new Thread(new Runnable() {      
  7.       @Override 
  8.       public void run() { 
  9.         try { 
  10.           uploadbar.setMax((int)uploadFile.length()); 
  11.           String souceid = logService.getBindId(uploadFile); 
  12.           String head = "Content-Length="+ uploadFile.length() + ";filename="+ uploadFile.getName() + ";sourceid="+  
  13.             (souceid==null"" : souceid)+" "
  14.           Socket socket = new Socket("192.168.1.78",7878); 
  15.           OutputStream outStream = socket.getOutputStream(); 
  16.           outStream.write(head.getBytes()); 
  17.           PushbackInputStream inStream = new PushbackInputStream(socket.getInputStream());   
  18.           String response = StreamTool.readLine(inStream); 
  19.           String[] items = response.split(";"); 
  20.           String responseid = items[0].substring(items[0].indexOf("=")+1); 
  21.           String position = items[1].substring(items[1].indexOf("=")+1); 
  22.           if(souceid==null){//代表原来没有上传过此文件,往数据库添加一条绑定记录 
  23.             logService.save(responseid, uploadFile); 
  24.           } 
  25.           RandomAccessFile fileOutStream = new RandomAccessFile(uploadFile, "r"); 
  26.           fileOutStream.seek(Integer.valueOf(position)); 
  27.           byte[] buffer = new byte[1024]; 
  28.           int len = -1; 
  29.           int length = Integer.valueOf(position); 
  30.           while(start&&(len = fileOutStream.read(buffer)) != -1){ 
  31.             outStream.write(buffer, 0, len); 
  32.             length += len; 
  33.             Message msg = new Message(); 
  34.             msg.getData().putInt("size", length); 
  35.             handler.sendMessage(msg); 
  36.           } 
  37.           fileOutStream.close(); 
  38.           outStream.close(); 
  39.           inStream.close(); 
  40.           socket.close(); 
  41.           if(length==uploadFile.length()) logService.delete(uploadFile); 
  42.         } catch (Exception e) { 
  43.           e.printStackTrace(); 
  44.         } 
  45.       } 
  46.     }).start(); 
  47.   } 

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接

原文链接:https://blog.csdn.net/pigdreams/article/details/52864867

延伸 · 阅读

精彩推荐