Android 通过TCP协议上传指定目录文件的方法
作者:祥子Gyx 发布时间:2023-11-07 23:34:11
标签: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("\r\n".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("\r\n".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);
来源:https://blog.csdn.net/weixin_35649059/article/details/105068257
0
投稿
猜你喜欢
- 1、什么是FeignFeign 是 Spring Cloud Netflix 组件中的一个轻量级 RESTful 的 HTTP 服务客户端,
- ArrayBlockingQueue有界的阻塞队列,内部是一个数组,有边界的意思是:容量是有限的,必须进行初始化,指定它的容量大小,以先进先
- 依赖如下:<dependency> <groupId>org.springframework.boot&
- 三目条件运算公式为 x?y:z 其中x的运算结果为boolean类型,先计算x的值,若为true,则整个三目运算的结果为表达式y
- 这篇文章主要介绍了Spring Boot2.X国际化文件编写配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 1.字符串值中包含E等科学计数法,比如12E-2,需要进行转化为普通数值0.12,2.转化函数如下: private Decima
- 一、IDEA自带打包插件内容:此种方式可以自己选择制作胖包或者瘦包,但推荐此种方式制作瘦包。输出:输出目录在out目录下流程步骤:第一步:
- 通过http://localhost:7002/card/services/HelloWorld?wsdl访问到xml如下,说明接口写对了。
- 这篇文章主要介绍了Jmeter如何添加循环控制器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以
- 相关知识:Java中三种简单注解介绍和代码实例一、作用用 @Deprecated注解的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危
- @PropertySource作用是:对自定义的properties文件加载使用:@PropertySource(value={"
- git仓库直达List<String> strings = Lists.newArrayList("name=kk&q
- 老生常谈的配置 但是还是需要说明一下EurekaApplication @EnableEurekaServer指定为server端
- 方法一:using System;using System.Collections.Generic;using System.Compon
- 还原背景大家都做过b-s架构的应用,也就是基于浏览器的软件应用。现在呢有个场景就是FE端也就是前端工程是前后端分离的,采用主流的前端框架VU
- 值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容
- java实现数据加密问题,具体代码如下所示:package Array;import java.util.Scanner;/*某个公司采用电
- 前言Windows 11下所有控件已经默认采用圆角,其效果更好、相对有着更好的优化,只是这是默认的行为,无法进一步自定义。注意两点:Pain
- 一、递归的思路一个方法在执行时,调用自身被称为“递归”。递归相当于数学归纳法,有一个起始条件,有一个递推公式。递归可以分为:单路递归和多路递
- 目录一、简介二、入门案例三、自定义认证逻辑四、自定义授权逻辑五、注销登录六、记住我功能七、会话管理一、简介Spring Security是一