JAVA实现文件与文件夹传输

  • 声明
  • 其他方法
    • 客户端:
    • 服务端:

声明

本代码的文件夹传输并非完全由本人完成,本人只是在实现递归的基本思想上,稍微处理与改动了原作者的代码的结构,从而实现了文件与文件夹传输。

基本思想:
1、通过递归的形式,创造方便区分开识别文件与文件夹的方法。

2、基于原作者的字符识别的思想,在服务器端可以识别接收文件或文件夹。

其他方法

组合设计模式实现,网上一大把,自己改吧!

客户端:

package My_File_TCP;import java.io.*;
import java.net.*;public class MyClient{Socket client;boolean flag=true;FileInputStream fis;//此输入流负责读取本机上要传输的文件DataOutputStream dos;//此输出流负责向另一台电脑(服务器端)传输数据DataInputStream dis;//此输入流负责读取另一台电脑的回应信息public static void main(String[] args) throws Exception{new MyClient().ClientStart();
}public void ClientStart() throws Exception{try{client=new Socket("127.0.0.1",8080);//服务器端的IP,(这个只是在局域网内的)我的是这个,你的根据实际而定System.out.println("已连接");dos=new DataOutputStream(client.getOutputStream());dis=new DataInputStream(client.getInputStream());String sc = "E:\\javatest_repositories";//这里你可以直接写成文件夹的路径或文件的路径File fi1=new File(sc);if(fi1.isDirectory()){//识别一开始你的是不是文件。是就以递归的形式,发送给服务端copydirectory(fi1,sc);}else if(fi1.isFile()){//如果你发送的是文件,那么就发给服务端String str1=sc.substring(0,sc.lastIndexOf("\\"));System.out.println(str1);copyfile(fi1,str1,dos,dis);}else{//加入错误提示System.out.println("请认真输入路径");}String s="/]00";//提示传输完毕的标记byte b[]=s.getBytes();dos.write(b,0,s.length());dos.flush();}catch(Exception e){System.out.println("Error");}
}public void copyfile(File file,String ss1,DataOutputStream dos1,DataInputStream dis1){byte buff[];String str;int ti;try{fis=new FileInputStream(file);str="/]0c"+(file.getPath().replace(ss1,""));//这是一个文件的名称buff=str.getBytes();dos1.write(buff);dos1.flush();dis1.read();dos1.writeInt(fis.available());//传输一个整型值,指明将要传输的文件的大小dos1.flush();dis1.read();buff=new byte[10000];while(fis.available()>0){//开始传送文件ti=fis.read(buff);dos1.write(buff,0,ti);dos1.flush();}dos1.flush();fis.close();dis1.read();}catch(Exception e){e.printStackTrace();}}public void copydirectory(File f,String ss)throws Exception{//这是传输的核心,而且将被递归byte b[]=null;String ts=null;for(File f1:f.listFiles()){ //首先通过if语句判断f1是文件还是文件夹if(f1.isDirectory()){ //fi是文件夹,则向服务器端传送一条信息ts="/]0f"+(f1.getPath().replace(ss,""));//"/]0f"用于表示这条信息的内容是文件夹名称b=ts.getBytes();dos.write(b);dos.flush();dis.read();copydirectory(f1,ss);//由于f1是文件夹(即目录),所以它里面很有可能还有文件或者文件夹,所以进行递归}else{copyfile(f1,ss,dos,dis);}}}
}

服务端:

package My_File_TCP;import java.io.*;
import java.net.*;
public class MyServer{ServerSocket server=null;Socket client=null;boolean flag=true;DataInputStream dis;DataOutputStream dos;public static void main(String[] args){new MyServer().ServerStart();}public void ServerStart(){try{server=new ServerSocket(8080);System.out.println("端口号:"+server.getLocalPort());client=server.accept();//等待接收System.out.println("连接完毕");dis=new DataInputStream(client.getInputStream());dos=new DataOutputStream(client.getOutputStream());try{Copy(dis,dos);}catch(Exception e){e.printStackTrace();}finally{client.close();server.close();}}catch(IOException e){System.out.println("Error");}}public void Copy(DataInputStream dis1,DataOutputStream dos1) throws Exception{String answer="g";byte ans[]=answer.getBytes();byte b[]=new byte[1000];int ti;int count1=0;//计算收到文件夹的次数int count2=0;//计算收到文件的次数new File("e:\\2").mkdirs();FileOutputStream fos;while(flag){ti=dis1.read(b);dos1.write(ans);String select=new String(b,0,ti);if(select.contains("/]0f")){//识别文件夹File f=new File("e:\\2\\"+(select.replace("/]0f","")));//去掉标识count1++;System.out.println("creat directory "+count1+" times");f.mkdirs();}else if(select.contains("/]0c")){//识别文件fos=new FileOutputStream("e:\\2\\"+(select.replace("/]0c","")));int tip=dis1.readInt();dos1.write(ans);while(tip>0){ti=dis1.read(b,0,(tip>1000?1000:tip));tip=tip-ti;String cs=new String(b,0,4);fos.write(b,0,ti);}count2++;fos.flush();fos.close();dos1.write(ans);System.out.println("creat file "+count2+" times");}else if(select.contains("/]00")){flag=false;//彻底结束的标志System.out.println("creat successfully");}}dis1.close();}
}

参考的代码的地址:
https://zhidao.baidu.com/question/112118386.html

[JAVA]递归实现客户端与服务端之间的文件与文件夹传输相关推荐

  1. 使用Netty实现客户端和服务端之间的双向通信

    欢迎阅读本篇文章 提示:本文只是提供部分核心代码,源码详见代码示例 使用Netty实现客户端和服务端之间的双向通信 前言 一.服务端 二.客户端 前言 在上个月的开发计划中,有一个系统控制喇叭播放的功 ...

  2. 【Android 开发】: Android客户端与服务端之间使用JSON交互数据。

    在前面的两讲中,我们讲解了JSON数据格式的一些基本知识,以及做一些小Demo,这一讲我们在前面的基础上来做一个综合的可扩展的Demo,主要是针对Android客户端解析服务端传递过来的JSON数据. ...

  3. 一篇文章带你了解https是如何做到客户端与服务端之间安全通信

    https是什么. 超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HT ...

  4. Java笔记-为客户端及服务端创建公私钥的密钥库

    使用密钥库使得客户端与服务器之间进行安全的通信,通过下面的方式生成公钥私钥库: 1. 创建client及server的keystore. 2. 从keystore中导出certificate. 3. ...

  5. python实现socket编程,客户端和服务端之间互相对话(二)

    首先运行服务端,处于监听状态: 最后运行客户端,就可以实现服务端和客户端之间互相发送消息. 客户端: import os import cv2 import socketremote_IP='127. ...

  6. JAVA NIO实现客户端与服务端通信

    使用java NIO实现nio客户端连接nio服务端发送消息 一丶NIO服务端 public static void main(String[] args) {server();}public sta ...

  7. 超详细,简单用socket建立客户端与服务端之间的通信

    socket,一种通用的网络编程接口,它是一个特殊的文件描述符. 有三种类型: 接流式套接字(SOCK_STREAM):提供了一个面向连接.可靠的数据传输服务,数据无差错.无重复的发送且按发送顺序接收 ...

  8. java 网络编程(二) tcp传输实现客户端和服务端进行信息交流

    1.使用Tcp从一台电脑往另一台电脑上发送文本数据 客户端: import java.io.*; import java.net.*; /**** 客户端,* 通过查阅socket对象,发现在该对象建 ...

  9. gRPC中Java和node进行异构通信-互为客户端和服务端

    场景 gPRC简介以及Java中使用gPRC实现客户端与服务端通信(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/ ...

最新文章

  1. python opencv local_threshold_Python-OpenCV中的cv2.threshold
  2. catia 工厂设计_SolidWorks、creo、UG哪个更适合机械设计?
  3. 欢迎使用CSDN-markdown编辑器2018
  4. jq 点击按钮跳转到微信_【看这里】教你用微信小程序登陆全国青少年普法网,方便快捷!...
  5. Hibernate陷阱
  6. Python 3.6.x字符串格式化方法小结
  7. 创始人的领导力和合伙人选择
  8. 数据结构详解之栈和队列
  9. 关于城市旅游的HTML网页设计-----郑州(10页) 基于HTML+CSS+JavaScript旅游网站设计与实现 静态HTML旅行主题网页作业
  10. [教学]基于crnn的中文汉字识别_pyqt界面交互界面python含代码
  11. CSS布局——圣杯布局、双飞翼布局
  12. 教你简单3步搞定——微信快速添加个人表情包
  13. python中perf_counter_Python time.perf_counter()用法及代码示例
  14. 数据库:Redis数据库
  15. b460m迫击炮黑苹果_打造十代i5ES极致性价比黑苹果主机
  16. element -UI升级,使用el-tabs导致浏览器卡死问题
  17. jacoco不是奶茶,却像奶茶一样美味,不尝一下吗?
  18. dpkg 删除软件_Ubuntu安装软件卸载软件的几种方法
  19. linux下CUPS学习心得
  20. 项目开发技术点、困难点总结——2020-2021年

热门文章

  1. windows下安装mingw-w64
  2. const int *,const int * const和int const *之间的区别
  3. java jsp 获得网页源代码三种方式
  4. 正在被二次元改造的中国城市
  5. 智慧党建系统开发建设
  6. Java 中的 getResource 方法
  7. 拱火AI大战全球最强法务部,艺术家为抵制AI画画出新招
  8. sql server技术知识
  9. 计算机网络互连基础技术及实战
  10. 统一身份认证(SSO/AD域/LDAP)