Android 通过TCP协议上传指定目录文件的方法
时间:2022-07-27
本文章向大家介绍Android 通过TCP协议上传指定目录文件的方法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
为了方便客户抓取Log,现通过TCP协议连接指定服务器,传输指定内容,定义指定目录,IP,PORT字段接收参数。直接上代码
public static void uploadLog(final String dirPath, final String IP, final int port ) {
JSONArray fileList = new JSONArray();
final JSONArray allFiles = getAllFiles(fileList,dirPath);
if(allFiles==null)return;
new Thread(){
@Override
public void run() {
super.run();
try {
Socket socket=new Socket(IP,port);
if(!socket.isConnected())return; //判断是否建立连接
OutputStream os = socket.getOutputStream();
int index = dirPath.lastIndexOf("/")+1;
os.write(dirPath.substring(index).getBytes());//TAG
os.write("rn".getBytes());
for (int i=0;i<allFiles.length();i++){
try {
JSONObject o = (JSONObject) allFiles.get(i);
String path = o.getString("path");
String name = o.getString("name");
FileInputStream fis=new FileInputStream(path);
if(fis!=null){
InputStreamReader inputreader = new InputStreamReader(fis);
BufferedReader buffreader = new BufferedReader(inputreader);
String line;
while ((line=buffreader.readLine())!=null){ //按行读取文件内容
os.write(line.getBytes());
os.write("rn".getBytes());//向服务器端发送文件
}
buffreader.close();
inputreader.close();
}
fis.close();
} catch (JSONException e) {
e.printStackTrace();
}
}
//关闭客户端输出流,中断上传
socket.shutdownOutput();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
/**
* 获取指定目录内所有文件路径
* @param dirPath 需要查询的文件目录
*/
public static JSONArray getAllFiles(JSONArray fileList,String dirPath) {
File f = new File(dirPath);
if (!f.exists()) {//判断路径是否存在
return null;
}
File[] files = f.listFiles();
if(files==null){//判断权限
return null;
}
for (File _file : files) {//遍历目录
if(_file.isFile()){
String _name=_file.getName();
String filePath = _file.getAbsolutePath();//获取文件路径
int end=_file.getName().lastIndexOf('.');
String fileName = _file.getName().substring(0,end);//获取文件名
try {
JSONObject _fInfo = new JSONObject();
_fInfo.put("name", fileName);
_fInfo.put("path", filePath);
fileList.put(_fInfo);
}catch (Exception e){
}
} else if(_file.isDirectory()){//查询子目录
getAllFiles(fileList,_file.getAbsolutePath());
} else{
}
}
return fileList;
}
必须声明一下权限:
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE” / <uses-permission android:name=”android.permission.READ_EXTERNAL_STORAGE” / <uses-permission android:name=”android.permission.INTERNET” </uses-permission
设计思路:
1首先通过第三方应用传过来的Log路径,通过遍历该路径,得到该目录下的所有文件,保存到集合中, 2然后通过socker建立通信,通信建立成功后开始传输日志, 3读取指定目录下的日志文件,解析内容传输到服务端, 4日志按行读取, 5内容头部增加TAG以区分不同应用的日志
服务端是因为有现成的软件,所以这里就不做解析了。
LogUtil.uploadLog(“storage/emulated/0/C28Log/CarRecorderLog”,”10.0.16.252″,8088);
总结
到此这篇关于Android 通过TCP协议上传指定目录文件的文章就介绍到这了,更多相关android 上传指定目录文件内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!
- 十分钟掌握微信小程序开发:高仿电商产品分类功能
- WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务
- DoubleAnimation方法
- 已经重写,源码和文章请跳转http://www.cnblogs.com/ymnets/p/5621706.html
- 有趣 不用js也能创建silverlight
- Hadoop和Spark的异同
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(62)-EF链接串加密
- sl 2.0 重要更新
- 云计算技术原理
- WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务
- 进入AI时代,你准备好了吗?
- TiDB 在 G7 的实践和未来
- 投资钛值的你,知道钛链是什么吗?
- Is this a MS EnterLib DAAB BUG or not?
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 【Java多线程-5】 CompletableFuture详解
- 【Java多线程-6】synchronized同步锁
- 【Java多线程-7】阅尽Java千般锁
- 【SpringBoot注解-2】AOP相关注解详解
- 【SpringBoot注解-3】Bean注入相关注解
- 【SpringBoot注解-4】:@Target、@Retention、@Documented注解简介
- 【Linux系列-1】top命令详解
- 【Linux系列-2】iostat命令详解
- 【Mybatis-1】MyBatis注解版详解
- 【MyBatis-2】MyBatis之xml 配置版
- 【MyBatis-3】MyBatis xml映射文件详解
- 【剑指Offer】II-数组中数字出现的次数 II
- 【MyBatis-4】MyBatis之动态SQL
- 【MyBatis-4】MyBatis批量insert、update、delete数据
- 【redis6.0.6】深入源码,一探究竟 -- redis服务器开机自启动