java文件上传

来源:互联网 发布:java 线程 通信 编辑:程序博客网 时间:2024/06/09 06:35

上传文本文件

客户端:

publicstaticvoid main(String[] args)throws UnknownHostException,IOException {

          //建立客户端Socket

          Socketsocket =new Socket("localhost", 10005);

          //获取输出流

          PrintWriterout =newPrintWriter(socket.getOutputStream(),true);

          //获取本地的文件流

          BufferedReaderbufr =new BufferedReader(new FileReader(new File("D:\\list.txt")));

          //开始上传

          System.out.println("开始上传");

          Stringline =null;

          while((line =bufr.readLine())!=null){

                out.println(line);

          }

      //    out.println("over");

          socket.shutdownOutput();//发送过去一个结束标志告诉服务器端结束

          //获取上传后的信息

          BufferedReaderbufIn =new BufferedReader(newInputStreamReader(socket.getInputStream()));

          while((line =bufIn.readLine())!=null){

                System.out.println(line);

          }

          //关闭资源

          socket.close();

          

      }

服务器端

      publicstaticvoid main(String[] args)throws IOException {

          //创建服务器端的ServerSocket

          ServerSocketss =new ServerSocket(10005);

          //获取客户端的Socket

          Socket s= ss.accept();

          //获取Socket输入流

          BufferedReaderbufIn =new BufferedReader(newInputStreamReader(s.getInputStream()));

          //将数据存储到服务器

          File file=new File("D:\\load\\loadlist.txt");

          if(!file.exists()){

                file.createNewFile();

          }

          BufferedWriterbufw =new BufferedWriter(new FileWriter(file));

          //上传

          Stringline =null;

          while((line =bufIn.readLine())!=null){//客户端结束,服务器端不能结束,等待。使用自定义的结束标志

                if("over".equals(line)){

                     break;

                }

                bufw.write(line);

                bufw.newLine();

                bufw.flush();//必须刷新

          }

          //上传成功

          s.getOutputStream().write("上传成功".getBytes());

          s.close();

          ss.close();

      }

上传媒体文件

      客户端

                       publicstaticvoid main(String[] args)throws UnknownHostException,IOException {

          //建立客户端Socket

                     Socketsocket =new Socket("localhost", 10006);

                     //获取输出流

                     OutputStreamout = socket.getOutputStream();

                     //获取本地的文件流

                     Filefile =new File("D:\\love.mp3");

                     byte[] buf =newbyte[1024];

                     int len = 0;

                     FileInputStreamin  =new FileInputStream(file);

                     //开始上传

                     System.out.println("开始上传");

                     Stringline =null;

                     while((len =in.read(buf))!=-1){

                           out.write(buf,0, len);

                     }

                //   out.println("over");

                     socket.shutdownOutput();//发送过去一个结束标志告诉服务器端结束

                     //获取上传后的信息

                     BufferedReaderbufIn =new BufferedReader(newInputStreamReader(socket.getInputStream()));

                     while((line =bufIn.readLine())!=null){

                           System.out.println(line);

                     }

                     //关闭资源

                     socket.close();

      }

      服务器端

publicstaticvoid main(String[] args)throws IOException {

          //创建服务器端的ServerSocket

                     ServerSocketss =new ServerSocket(10006);

                     //获取客户端的Socket

                     Sockets = ss.accept();

                     //获取Socket输入流

                     InputStreamin = s.getInputStream();

                     //将数据存储到服务器

                     Filefile =new File("D:\\load\\love.mp3");

                     FileOutputStreamout =new FileOutputStream(file);

                     //上传

                     Stringline =null;

                     byte[] buf =newbyte[1024];

                     int len = 0;

                     while((len =in.read(buf))!=-1){//客户端结束,服务器端不能结束,等待。使用自定义的结束标志

                           out.write(buf,0, len);

                     }

                     //上传成功

                     s.getOutputStream().write("上传成功".getBytes());

                     s.close();

                     ss.close();

      }

实现多客户端的上传

服务器端的改变

         class ReadOrWriteimplements Runnable{

      private Sockets ;

      @Override

      publicvoid run() {

          int count = 0;

          try {

                InputStream in =s.getInputStream();

                Filedir =new File("D:\\load");

                if(!dir.exists()){

                     dir.mkdirs();

                }

                Filefile =new File(dir,".mp3");

                while(file.exists()){

                      file =new File(dir,"("+(++count)+")"+".mp3");

                }

                FileOutputStreamout =new FileOutputStream(file);

                Stringline =null;

                byte[] buf =newbyte[1024];

                int len = 0;

                while((len =in.read(buf))!=-1){//客户端结束,服务器端不能结束,等待。使用自定义的结束标志

                     out.write(buf,0, len);

                }

                s.getOutputStream().write("上传成功".getBytes());

                s.close();

          }catch (IOException e) {

                //TODO Auto-generated catchblock

                e.printStackTrace();

          }

      }

 

      public ReadOrWrite(Socket s) {

          super();

          this.s = s;

      }

     

     

}

Public static void main(String[] args){

      ServerSocket  ss = new ServerSocket(10005);

      while(true){

                           Sockets = ss.accept();

                           new Thread(new ReadOrWrite(s)).start();

                      }

}

 

原创粉丝点击