日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文件上传案例优化(文件命名循环接收多线程提高效率)

發布時間:2024/4/13 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文件上传案例优化(文件命名循环接收多线程提高效率) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
package com.learn.demo03.FileUpload;import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket;/*文件上傳案例的客戶端:讀取本地文件,上傳到服務器,讀取服務器回寫的數據明確:數據源:c:\\1.jpg目的地:服務器實現步驟:1.創建一個本地字節輸入流FileInputStream對象,構造方法中綁定要讀取的數據源2.創建一個客戶端Socket對象,構造方法中綁定服務器的IP地址和端口號3.使用Socket中的方法getOutputStream,獲取網絡字節輸出流OutputStream對象4.使用本地字節輸入流FileInputStream對象中的方法read,讀取本地文件5.使用網絡字節輸出流OutputStream對象中的方法write,把讀取到的文件上傳到服務器6.使用Socket中的方法getInputStream,獲取網絡字節輸入流InputStream對象7.使用網絡字節輸入流InputStream對象中的方法read讀取服務回寫的數據8.釋放資源(FileInputStream,Socket)*/ public class TCPClient {public static void main(String[] args) throws IOException {//1.創建一個本地字節輸入流FileInputStream對象,構造方法中綁定要讀取的數據源FileInputStream fis = new FileInputStream("c:\\1.jpg");//2.創建一個客戶端Socket對象,構造方法中綁定服務器的IP地址和端口號Socket socket = new Socket("127.0.0.1",8888);//3.使用Socket中的方法getOutputStream,獲取網絡字節輸出流OutputStream對象OutputStream os = socket.getOutputStream();//4.使用本地字節輸入流FileInputStream對象中的方法read,讀取本地文件int len = 0;byte[] bytes = new byte[1024];while((len = fis.read(bytes))!=-1){//5.使用網絡字節輸出流OutputStream對象中的方法write,把讀取到的文件上傳到服務器os.write(bytes,0,len);}/*解決:上傳完文件,給服務器寫一個結束標記void shutdownOutput() 禁用此套接字的輸出流。對于 TCP 套接字,任何以前寫入的數據都將被發送,并且后跟 TCP 的正常連接終止序列。*/socket.shutdownOutput();//6.使用Socket中的方法getInputStream,獲取網絡字節輸入流InputStream對象InputStream is = socket.getInputStream();//7.使用網絡字節輸入流InputStream對象中的方法read讀取服務回寫的數據while((len = is.read(bytes))!=-1){System.out.println(new String(bytes,0,len));}//8.釋放資源(FileInputStream,Socket)fis.close();socket.close();} } package com.learn.demo03.FileUpload;import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Random;/*文件上傳案例服務器端:讀取客戶端上傳的文件,保存到服務器的硬盤,給客戶端回寫"上傳成功"明確:數據源:客戶端上傳的文件目的地:服務器的硬盤 d:\\upload\\1.jpg實現步驟:1.創建一個服務器ServerSocket對象,和系統要指定的端口號2.使用ServerSocket對象中的方法accept,獲取到請求的客戶端Socket對象3.使用Socket對象中的方法getInputStream,獲取到網絡字節輸入流InputStream對象4.判斷d:\\upload文件夾是否存在,不存在則創建5.創建一個本地字節輸出流FileOutputStream對象,構造方法中綁定要輸出的目的地6.使用網絡字節輸入流InputStream對象中的方法read,讀取客戶端上傳的文件7.使用本地字節輸出流FileOutputStream對象中的方法write,把讀取到的文件保存到服務器的硬盤上8.使用Socket對象中的方法getOutputStream,獲取到網絡字節輸出流OutputStream對象9.使用網絡字節輸出流OutputStream對象中的方法write,給客戶端回寫"上傳成功"10.釋放資源(FileOutputStream,Socket,ServerSocket)*/ public class TCPServer {public static void main(String[] args) throws IOException {//1.創建一個服務器ServerSocket對象,和系統要指定的端口號ServerSocket server = new ServerSocket(8888);//2.使用ServerSocket對象中的方法accept,獲取到請求的客戶端Socket對象/*讓服務器一直處于監聽狀態(死循環accept方法)有一個客戶端上傳文件,就保存一個文件*/while(true){Socket socket = server.accept();/*使用多線程技術,提高程序的效率有一個客戶端上傳文件,就開啟一個線程,完成文件的上傳*/new Thread(new Runnable() {//完成文件的上傳@Overridepublic void run() {try {//3.使用Socket對象中的方法getInputStream,獲取到網絡字節輸入流InputStream對象InputStream is = socket.getInputStream();//4.判斷d:\\upload文件夾是否存在,不存在則創建File file = new File("d:\\upload");if(!file.exists()){file.mkdirs();}/*自定義一個文件的命名規則:防止同名的文件被覆蓋規則:域名+毫秒值+隨機數*/String fileName = "learn"+System.currentTimeMillis()+new Random().nextInt(999999)+".jpg";//5.創建一個本地字節輸出流FileOutputStream對象,構造方法中綁定要輸出的目的地//FileOutputStream fos = new FileOutputStream(file+"\\1.jpg");FileOutputStream fos = new FileOutputStream(file+"\\"+fileName);//6.使用網絡字節輸入流InputStream對象中的方法read,讀取客戶端上傳的文件int len =0;byte[] bytes = new byte[1024];while((len = is.read(bytes))!=-1){//7.使用本地字節輸出流FileOutputStream對象中的方法write,把讀取到的文件保存到服務器的硬盤上fos.write(bytes,0,len);}//8.使用Socket對象中的方法getOutputStream,獲取到網絡字節輸出流OutputStream對象//9.使用網絡字節輸出流OutputStream對象中的方法write,給客戶端回寫"上傳成功"socket.getOutputStream().write("上傳成功".getBytes());//10.釋放資源(FileOutputStream,Socket,ServerSocket)fos.close();socket.close();}catch (IOException e){System.out.println(e);}}}).start();}//服務器就不用關閉//server.close();} }

?

總結

以上是生活随笔為你收集整理的文件上传案例优化(文件命名循环接收多线程提高效率)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。