Android网络编程只局域网传输文件

该博客介绍了一个Android网络编程的实例,用于在局域网内进行文件的发送和接收。通过创建一个Socket管理类,实现了接收和发送文件的核心功能。文件传输过程包括发送文件名和文件数据,确保了在Android设备间的安全传输。注意,此类操作应在子线程中执行,以避免主线程阻塞。
摘要由CSDN通过智能技术生成

Android网络编程只局域网传输文件

首先创建一个socket管理类,该类是传输文件的核心类,主要用来发送文件和接收文件

具体代码如下:


```java
  1 package com.jiao.filesend;
  2 
  3 import java.io.BufferedReader;
  4 import java.io.BufferedWriter;
  5 import java.io.FileInputStream;
  6 import java.io.FileOutputStream;
  7 import java.io.InputStream;
  8 import java.io.InputStreamReader;
  9 import java.io.OutputStream;
 10 import java.io.OutputStreamWriter;
 11 import java.net.ServerSocket;
 12 import java.net.Socket;
 13 
 14 import android.os.Environment;
 15 
 16 /**
 17  * Socket管理类
 18  * 1、接收文件
 19  * 2、发送文件
 20  * @author jiaocg
 21  *
 22  */
 23 public class SocketManager {
 24     private ServerSocket server;
 25     public SocketManager(ServerSocket server){
 26         this.server = server;
 27     }
 28     //接收文件
 29     public String ReceiveFile(){
 30         try{
 31             //接收文件名
 32             Socket name = server.accept();
 33             //获取数据的输入流
 34             InputStream nameStream = name.getInputStream();
 35             //字符流转换为字节流
 36             InputStreamReader streamReader = new InputStreamReader(nameStream);
 37             BufferedReader br = new BufferedReader(streamReader);
 38             //接收到文件名
 39             String fileName = br.readLine();
 40             br.close();
 41             streamReader.close();
 42             nameStream.close();
 43             name.close();
 44             //接收文件数据
 45             Socket data = server.accept();
 46             InputStream dataStream = data.getInputStream();
 47             String savePath = Environment.getExternalStorageDirectory().getPath() + "/" + fileName;
 48             FileOutputStream file = new FileOutputStream(savePath, false);
 49             byte[] buffer = new byte[1024];
 50             int size = -1;
 51             while ((size = dataStream.read(buffer)) != -1){
 52                 file.write(buffer, 0 ,size);
 53             }
 54             file.close();
 55             dataStream.close();
 56             data.close();
 57             return fileName + "---接收完成"+"---保存至:"+savePath;
 58         }catch(Exception e){
 59             System.out.println(e.toString());
 60             return "接收错误:\n" + e.getMessage();
 61         }
 62     }
 63     
 64     //发送文件
 65     public String SendFile(String fileName, String path, String ipAddress, int port){
 66         try {
 67             //发送文件名
 68             //首先发送文件名
 69             Socket name = new Socket(ipAddress, port);
 70             //创建输出流
 71             OutputStream outputName = name.getOutputStream();
 72             //字符流转换为字节流
 73             OutputStreamWriter outputWriter = new OutputStreamWriter(outputName);
 74             //缓冲区
 75             BufferedWriter bwName = new BufferedWriter(outputWriter);
 76             //写到缓冲区
 77             bwName.write(fileName);
 78             bwName.close();
 79             outputWriter.close();
 80             outputName.close();
 81             name.close();
 82             
 83             //发送文件数据
 84             Socket data = new Socket(ipAddress, port);
 85             //创建输出流
 86             OutputStream outputData = data.getOutputStream();
 87             //从文件系统中的某个文件中获得输入字节
 88             FileInputStream fileInput = new FileInputStream(path);
 89             int size = -1;
 90             byte[] buffer = new byte[1024];
 91             while((size = fileInput.read(buffer, 0, 1024)) != -1){
 92                 outputData.write(buffer, 0, size);
 93             }
 94             outputData.close();
 95             fileInput.close();
 96             data.close();
 97             return fileName + " 发送完成";
 98         } catch (Exception e) {
 99             return "发送错误:\n" + e.getMessage();
100         } 
101     }
102 }
 

我们可以利用上述的文件传输类,来实现局域网中的文件传输

具体使用代码如下:

1 // 1、文件名 2、文件路径 3、目标ip 4、目标端口
2 String response = socketManager.SendFile(fileName, filePath,ip, POST);
3 Message.obtain(handler, 0, response).sendToTarget();
 

调用以上代码就可以实现局域网中的文件传输;

注意:以上文件传输属于网络传送,记得在子线程中执行哦,否则要报错!

转载于:[https://www.cnblogs.com/all88/p/4569089.html](https://www.cnblogs.com/all88/p/4569089.html)

相关资源:Android-实现了Android设备之间通过Wifi传输文件的功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值