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 LV15
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日

最近浏览