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后端開(kāi)發(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ú)立的線程來(lái)處理與這個(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ā)送過(guò)來(lái)的數(shù)據(jù)
DataInputStream stream = new DataInputStream(socket.getInputStream());
// 讀取客戶端發(fā)送過(guò)來(lái)的文件類型
String suffix = stream.readUTF();
System.out.println("服務(wù)端已經(jīng)成功接收到了文件類型:" + suffix);
// 定義一個(gè)字節(jié)輸出管道負(fù)責(zé)把客戶端發(fā)來(lái)的文件數(shù)據(jù)寫(xiě)出去
FileOutputStream stream2 = new FileOutputStream("E:\\Java后端開(kāi)發(fā)之路\\IO\\講義\\b.txt"+UUID.randomUUID().toString()+suffix);
// 從數(shù)據(jù)輸入流中讀取文件數(shù)據(jù),寫(xiě)出到字節(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雙向鏈表按照順序添加節(jié)點(diǎn)的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Java雙向鏈表按照順序添加節(jié)點(diǎn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
Java實(shí)現(xiàn)把文件及文件夾壓縮成zip
這篇文章主要介紹了Java實(shí)現(xiàn)把文件及文件夾壓縮成zip,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
Jmeter參數(shù)化獲取序列數(shù)據(jù)實(shí)現(xiàn)過(guò)程
這篇文章主要介紹了Jmeter參數(shù)化獲取序列數(shù)據(jù)實(shí)現(xiàn)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
解決Spring?Security集成knife4j訪問(wèn)接口文檔出現(xiàn)403的問(wèn)題
這篇文章主要給大家介紹了如何解決Spring?Security集成knife4j訪問(wèn)接口文檔出現(xiàn)403的問(wèn)題,文中有詳細(xì)的解決方案,有需要的朋友可以參考閱讀下2023-07-07
用Java連接sqlserver數(shù)據(jù)庫(kù)時(shí)候幾個(gè)jar包的區(qū)別分析
這篇文章主要介紹了用Java連接sqlserver數(shù)據(jù)庫(kù)時(shí)候幾個(gè)jar包的區(qū)別分析,需要的朋友可以參考下2014-10-10
java數(shù)據(jù)結(jié)構(gòu)和算法學(xué)習(xí)之漢諾塔示例
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)和算法中的漢諾塔示例,需要的朋友可以參考下2014-02-02

