Java基于BIO實(shí)現(xiàn)文件上傳功能
本文實(shí)例為大家分享了Java基于BIO實(shí)現(xiàn)文件上傳功能的具體代碼,供大家參考,具體內(nèi)容如下
客戶端
package com.qst.file;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try {
// 獲取輸入流
FileInputStream stream = new FileInputStream("E:\\Java后端開發(fā)之路\\IO\\講義\\a.txt");
// 請(qǐng)求與服務(wù)端進(jìn)行建立連接
Socket socket = new Socket("127.0.0.1", 9999);
// 字節(jié)輸出流包裝成一個(gè)數(shù)據(jù)輸出流
DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());
outputStream.writeUTF(".txt");
int len;
byte[] b = new byte[1024];
while ((len = stream.read(b)) > 0) {
outputStream.write(b, 0, len);
}
outputStream.flush();
// 通知服務(wù)端這邊的數(shù)據(jù)發(fā)送完畢了
socket.shutdownOutput();
} catch (Exception e) {
// TODO: handle exception
}
}
}
服務(wù)端
package com.qst.file;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
// 建立服務(wù)器
ServerSocket socket = new ServerSocket(9999);
Socket accept = socket.accept();
// 交給一個(gè)獨(dú)立的線程來處理與這個(gè)客戶端的文件通信需求。
new ServerThread(accept).start();
}
}
服務(wù)端線程處理
package com.qst.file;
import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.UUID;
public class ServerThread extends Thread{
private Socket socket;
public ServerThread(Socket accept) {
this.socket = accept;
}
@Override
public void run() {
try {
// 得到一個(gè)數(shù)據(jù)輸入流讀取客戶端發(fā)送過來的數(shù)據(jù)
DataInputStream stream = new DataInputStream(socket.getInputStream());
// 讀取客戶端發(fā)送過來的文件類型
String suffix = stream.readUTF();
System.out.println("服務(wù)端已經(jīng)成功接收到了文件類型:" + suffix);
// 定義一個(gè)字節(jié)輸出管道負(fù)責(zé)把客戶端發(fā)來的文件數(shù)據(jù)寫出去
FileOutputStream stream2 = new FileOutputStream("E:\\Java后端開發(fā)之路\\IO\\講義\\b.txt"+UUID.randomUUID().toString()+suffix);
// 從數(shù)據(jù)輸入流中讀取文件數(shù)據(jù),寫出到字節(jié)輸出流中去
byte [] b= new byte[1024];
int len;
while((len = stream.read(b)) > 0) {
stream2.write(b, 0, len);
}
System.out.println("操作完畢");
stream2.close();
stream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java BeanMap實(shí)現(xiàn)Bean與Map的相互轉(zhuǎn)換
這篇文章主要介紹了利用BeanMap進(jìn)行對(duì)象與Map的相互轉(zhuǎn)換,通過net.sf.cglib.beans.BeanMap類中的方法來轉(zhuǎn)換,效率極高,本文給大家分享實(shí)現(xiàn)代碼,感興趣的朋友一起看看吧2022-11-11
java?-jar/-cp啟動(dòng)添加外部的依賴包方式
這篇文章主要介紹了java?-jar/-cp啟動(dòng)添加外部的依賴包方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
springboot實(shí)現(xiàn)基于aop的切面日志
這篇文章主要為大家詳細(xì)介紹了springboot實(shí)現(xiàn)基于aop的切面日志,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09
Java實(shí)現(xiàn)兩人五子棋游戲(五) 判斷是否有一方勝出
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)兩人五子棋游戲,判斷是否有一方勝出,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
Java獲取XML節(jié)點(diǎn)總結(jié)之讀取XML文檔節(jié)點(diǎn)的方法
下面小編就為大家?guī)硪黄狫ava獲取XML節(jié)點(diǎn)總結(jié)之讀取XML文檔節(jié)點(diǎn)的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-10-10
Java多線程面試題之交替輸出問題的實(shí)現(xiàn)
本文主要介紹了Java多線程面試題之交替輸出問題的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
如何使用axis調(diào)用WebService及Java?WebService調(diào)用工具類
Axis是一個(gè)基于Java的Web服務(wù)框架,可以用來調(diào)用Web服務(wù)接口,下面這篇文章主要給大家介紹了關(guān)于如何使用axis調(diào)用WebService及Java?WebService調(diào)用工具類的相關(guān)資料,需要的朋友可以參考下2023-04-04

