文件上传多线程方法

创建一个Upload类,继承Runnable接口,并将Socket封装起来,构造方法有参构造和无参构造,再创建一个run方法,

public class UPload implements Runnable {private Socket socket;    public UPload() {super();
    }public UPload(Socket socket) {super();this.socket = socket;
    }public void run() {        try {//明确数据源InputStream in = socket.getInputStream();//明确目的地File file=new File("E:\\io1127\\picture");//如果文件不存在if(!file.exists()){//那就创建文件                file.mkdirs();
            }//明确文件名String filename="oracle"+System.currentTimeMillis()+new Random().nextInt(9999)+".jpg";//明确目的地FileOutputStream fos=new FileOutputStream(file+File.separator+filename);//开始复制byte[] bytes=new byte[1024];int len=0;while((len=in.read(bytes))!=-1){
                fos.write(bytes, 0, len);
            }//回复客户端//获取字节输出流OutputStream out=socket.getOutputStream();//发送内容out.write("收到".getBytes());    
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

public class Demo01 {public static void main(String[] args) throws IOException {//创建服务器对象,明确端口号ServerSocket server=new ServerSocket(8888);while(true){//与客户端连接Socket socket=server.accept();//创建线程明确线程任务并开启线程new Thread(new UPload(socket)).start();            
        }
}

客户端:

public class TCPClient {//客户端public static void main(String[] args) throws UnknownHostException, IOException {// 创建客户端对象,明确服务器端的ip和端口号
     //此时只需要接入同一个网络中,并设置服务器IP地址,就可以上传文件了Socket socket=new Socket("127.0.0.1",8888);//明确数据源FileInputStream fis=new FileInputStream("E:\\io1127\\a.jpg");//明确目的地OutputStream out=socket.getOutputStream();int len=0;byte[] bytes=new byte[1024];//开始复制while((len=fis.read(bytes))!=-1){
            out.write(bytes,0,len);
        }//告知服务器端结束,别读了        socket.shutdownOutput();//接收服务器端的回复//获取字节输入流InputStream in=socket.getInputStream();
        len=in.read(bytes);
        System.out.println("服务器端回复:"+new String(bytes,0,len));//释放资源        socket.close();        
    }
}

上传文件只需要执行客户端就可以,可以同时多个客户端上传文件