步骤

UpdateClient 客户端

1.提示输入要上传的文件路径, 验证路径是否存在以及是否是文件夹
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 1.提示输入要上传的文件路径, 验证路径是否存在以及是否是文件夹
File file = getFile();

private static File getFile() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个人文件路径");
while(true)
{
String line = scanner.nextLine();
File file = new File(line);
if(!file.exists())
System.out.println("文件路径不存在,请重新录入:");
else if (file.isDirectory())
System.out.println("录入为文件夹路径,非文件路径,请重新录入:");
else
return file;
}
2.发送文件名到服务端
1
2
3
4
5
// 2.发送文件名到服务端
Socket socket = new Socket("127.0.0.1", 54321);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream ps = new PrintStream(socket.getOutputStream());
ps.println(file.getName());
6.接收结果, 如果存在给予提示, 程序直接退出
1
2
3
4
5
6
7
// 6.接收结果, 如果存在给予提示, 程序直接退出
String result = br.readLine();
if("存在".equals(result)) {
System.out.println("上传的文件已经存在");
socket.close();
return;
}
7.如果不存在, 定义FileInputStream读取文件, 写出到网络
1
2
3
4
5
6
7
// 7.如果不存在, 定义FileInputStream读取文件, 写出到网络
FileInputStream fis = new FileInputStream(file);
int len;
byte[] arr = new byte[8192];
while((len=fis.read())!=-1){
ps.write(arr,0,len);
}

UpdateServer 服务端

3.建立多线程的服务器
1
2
3
//3.建立多线程的服务器
ServerSocket server = new ServerSocket(54321);
System.out.println("服务器启动,绑定端口号54321");
4.读取文件名
1
2
3
4
5
6
7
8
9
//4.读取文件名
final Socket socket = server.accept(); //接受请求
new Thread() {
public void run() {
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
PrintStream ps = new PrintStream(socket.getOutputStream());
String fileName = br.readLine();
}.start();
5.判断文件是否存在, 将结果发回客户端
1
2
3
4
5
6
7
8
9
10
//5.判断文件是否存在, 将结果发回客户端
File dir = new File("update"); //创建上传文件夹的file对象
dir.mkdir(); //创建文件夹
File file = new File(dir,fileName); //封装成File对象
if(file.exists()) { //服务器已经存在需要上传的文件
ps.println("存在");
socket.close();
return;
}else
ps.println("不存在");
8.定义FileOutputStream, 从网络读取数据, 存储到本地
1
2
3
4
5
6
7
//8.定义FileOutputStream, 从网络读取数据, 存储到本地
FileOutputStream fos = new FileOutputStream(file);
byte[] arr = new byte[8192];
int len;
while((len=is.read(arr))!=-1) {
fos.write(arr,0,len);
}
JavaSE实战源码

客户端上传文件到服务端
GUIChat
Bank项目