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);
总结
到此这篇关于Android 通过TCP协议上传指定目录文件的文章就介绍到这了,更多相关android 上传指定目录文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Android通过自定义ImageView控件实现图片的缩放和拖动的实现代码
通过自定义ImageView控件,在xml布局里面调用自定的组件实现图片的缩放。下面给大家分享实现代码,感兴趣的朋友一起看看吧2016-10-10Android uses-permission权限列表中文注释版
Android有一个精心设计的安全模型。每一个应用都有其自己Linux用户和群组,在单独的进程和VM上运行,不能影响到其他应用2014-05-05Android App中使用RatingBar实现星级打分功能的教程
这篇文章主要介绍了Android App中使用RatingBar实现星级打分功能的教程,文中举了一个使用SeekBar与RatingBar制作的应用内打分条的功能,非常简单,需要的朋友可以参考下2016-04-04Android 自定义View实现任意布局的RadioGroup效果
这篇文章主要介绍了Android 自定义View实现任意布局的RadioGroup,需要的朋友可以参考下2018-11-11
最新评论