android 上传目录文件名,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

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;

}

必须声明一下权限:

设计思路:

1首先通过第三方应用传过来的Log路径,通过遍历该路径,得到该目录下的所有文件,保存到集合中,

2然后通过socker建立通信,通信建立成功后开始传输日志,

3读取指定目录下的日志文件,解析内容传输到服务端,

4日志按行读取,

5内容头部增加TAG以区分不同应用的日志

服务端是因为有现成的软件,所以这里就不做解析了。

LogUtil.uploadLog("storage/emulated/0/C28Log/CarRecorderLog","10.0.16.252",8088);

a1c6a9f71d2cea852c15a7d6e1a3b0c9.png

总结

到此这篇关于Android 通过TCP协议上传指定目录文件的文章就介绍到这了,更多相关android 上传指定目录文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值