首页>代码>使用java socket做的简单文件上传功能>/SocketUpload/src/cn/upload/UploadClient.java
package cn.upload;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;

public class UploadClient {

	public static void main(String[] args) throws Exception {
		// 1.提示输入要上传的文件路径, 验证路径是否存在以及是否是文件夹
		File file = getFile();
		
		// 2.发送文件名到服务端
		Socket socket = new Socket("192.168.5.39", 12345);
		BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		PrintStream ps = new PrintStream(socket.getOutputStream());
		ps.println(file.getName());
		
		// 2.1.发送文件大小到服务端
		ps.println(file.length());
		
		// 5.接收结果, 如果存在给予提示, 程序直接退出
		String result = br.readLine();
		if ("存在".equals(result)) {
			System.out.println("文件已存在, 请不要重复上传");
			socket.close();
			return;
		}
		
		long length = Long.parseLong(result);		// 获取服务端文件的大小 
		
		// 6.如果不存在, 定义FileInputStream读取文件, 写出到网络
		FileInputStream fis = new FileInputStream(file);
		fis.skip(length);							// 服务端完成了多少就跳过多少
		
		byte[] buffer = new byte[1024];
		int len;
		long finish = 0;
		while ((len = fis.read(buffer)) != -1) {
			ps.write(buffer, 0, len);
			finish += len;
			System.out.println("已完成: " + finish * 100 / file.length() + "%");
		}
		fis.close();
		ps.close();
		socket.close();
		
		System.out.println("上传完毕");
	}
	
	private static File getFile() {
		System.out.println("请输入要上传的文件路径:");
		Scanner scanner = new Scanner(System.in);
		while (true) {
			File file = new File(scanner.nextLine());
			if (!file.exists()) 
				System.out.println("您输入的路径不存在, 请重新输入:");
			else if (file.isDirectory())
				System.out.println("暂不支持文件夹上传, 请输入一个文件路径:");
			else 
				return file;
		}
	}

}
最近下载更多
2673747024  LV7 2021年1月9日
1106547553  LV10 2020年6月25日
可可_西里  LV11 2020年1月2日
litaosb  LV5 2019年12月11日
1126055836  LV13 2019年6月17日
18832034896  LV2 2019年5月31日
灵依ziNing  LV7 2019年5月10日
abcd22311  LV1 2019年1月3日
841713241  LV2 2018年12月29日
kenpfang  LV18 2018年6月14日
最近浏览更多
uni-code_0123  LV1 2023年11月29日
hero-88  LV1 2021年11月29日
ghrrrrrr 2021年11月11日
暂无贡献等级
justinsx  LV1 2021年11月3日
 LV10 2021年6月12日
fffokeee  LV1 2021年5月10日
无花空折枝  LV9 2021年4月30日
微量的记忆  LV10 2021年4月12日
sink122406  LV12 2021年4月5日
与你同行2019  LV11 2021年2月25日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友