多線程上傳文件
// 客戶端
public class Demo_Upload_Client {
public static void main(String[] args) throws Exception {
// 1. 提示輸入要上傳的文件路徑,驗證路徑是否存在以及是否是文件夾
File file = getFile();
// 2. 發送文件到服務器
Socket socket = new Socket("127.0.0.1", 6666);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream ps = new PrintStream(socket.getOutputStream());
ps.println(file.getName());
// 6. 接收結果,如果存在給予提示,程序直接退出
String result = br.readLine();// 讀取結果
if ("文件存在".equals(result)) {
System.out.println("文件已經存在");
socket.close();
return;
} else {
// 7. 不存在,定義FileInputStream讀取文件,寫出到網絡
FileInputStream fis = new FileInputStream(file);
byte[] arr = new byte[8192];
int len;
while ((len = fis.read(arr)) != -1) {
ps.write(arr, 0, len);
}
fis.close();
socket.close();
}
}
/**
* 獲取文件對象
*
* @return File
*/
private static File getFile() {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個文件路徑:");
while (true) {
String line = sc.nextLine();
File file = new File(line);
if (!file.exists()) {
System.out.println("路徑不存在");
} else if (file.isDirectory()) {
System.out.println("必須是文件");
} else {
return file;
}
}
}
}
// 服務器
public class Demo_Upload_Server {
public static void main(String[] args) throws Exception {
// 3. 建立多線程服務器
ServerSocket ss = new ServerSocket(6666);
System.out.println("服務器啟動");
// 4. 讀取文件名
while (true) {
final Socket socket = ss.accept();// 接收請求
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
PrintStream ps = new PrintStream(socket.getOutputStream());
new Thread() {
@Override
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
PrintStream ps = new PrintStream(socket.getOutputStream());
String fileName = br.readLine(); // 讀取文件名
File dir = new File("update");
dir.mkdir();
File file = new File(dir, fileName);
// 5. 判斷文件是否已經存在
if (file.exists()) {
ps.println("文件存在");
socket.close();
return;
} else {
ps.println("不存在");
}
// 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);
}
fos.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
}
}
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。