[0] 前言-写在开始之前
新人,Java学习中,文章中遗漏错误之处,欢迎斧正
个人博客,完全原创
转载请注明出处。
项目全代码地址:GitHub
最近的学习了IO流和网络编程相关的API.IO流时学会了如何进行本地文件之间的读写操作,而网络编程的Socket类则实现了两台计算机间的数据联通交流.
每次学习了新知识,就会忍不住的进行脑洞和实践.因此本文旨在利用两个知识点进行网络编程和IO流相关的实践操作.
实现一个多文件传输系统大雾.这个系统的出发点源自于小时候对黑客一键拷贝文件的潇洒姿态的憧憬.
[1] 从一次理论成功的文件传输出发,设计类,方法和数据结构
[1.0] 主要步骤
若要实现机算机间的多文件传输系统一次成功的文件流的传输需要经过以下几个主要步骤:
- 客户端的目标文件夹读取,将想要传输的文件夹中所有文件都循环读取一边,存储她们
- 客户端与服务端建立通信连接
- 客户端按照文件地址进行文件读取,将数据流按顺序传输给客户端
- 客户端获取客户端传输的数据,将它们写入对应的文件
[1.1] 客户端递归存储文件地址
设计一个方法,传入文件夹地址参数,传出含有该文件夹下所有文件地址参数的数据结构。
根据方法的描述,我们可以设计的是一个File复制相关工具类FilesCopyUtil
,并设计从指定文件夹内文件读取存储所有文件的静态(工厂)方法
static List<File> findFile(String path)
在这个方法中递归文件夹,存储所有文件地址。
伪代码:
class FileCopyUtil{
public static List<String> findFile(String path){
List<File> files = new ArrayList<File>();
File file = new File(path);
if(file.isFile) {
files.add(file);
} else{
List<File> subs = file.listFiles();
for(File sub : subs)
findFile(sub);
}
}
}
[1.2] 客户端与服务端简历通信
客户端和服务端在实际应用中都是处于两台不同的计算机中进行工作,在本博客中的计算机间网络地址定位和数据数据传输使用的是Java已经进行了高层次封装好的Socket类和ServerSocket类,实际上使用的是TCP/IP协议。
TCP/IP协议(传输控制协议)由网络层的IP协议和传输层的TC