JavaSE实战——网络编程【客户端上传文件到服务端】

版权声明:文章原创,未经允许请勿转载 https://blog.csdn.net/DanBo_C/article/details/89849731

步骤

UpdateClient 客户端

1.提示输入要上传的文件路径, 验证路径是否存在以及是否是文件夹
// 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.发送文件名到服务端
// 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.接收结果, 如果存在给予提示, 程序直接退出
// 6.接收结果, 如果存在给予提示, 程序直接退出
String result = br.readLine();
if("存在".equals(result)) {
	System.out.println("上传的文件已经存在");
	socket.close();
	return;
}
7.如果不存在, 定义FileInputStream读取文件, 写出到网络
// 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.建立多线程的服务器
//3.建立多线程的服务器
ServerSocket server = new ServerSocket(54321);
System.out.println("服务器启动,绑定端口号54321");
4.读取文件名
//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.判断文件是否存在, 将结果发回客户端
//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, 从网络读取数据, 存储到本地
//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项目

猜你喜欢

转载自blog.csdn.net/DanBo_C/article/details/89849731