2016-09-27 26 views
0

我正尝试使用JAVA中的套接字将文件从客户端上传到服务器。这是部分工作,但是,在服务器上创建的文件是一个空文本文件。任何人都可以提供任何关于我可能有问题的建议。感谢:通过java中的套接字将文件从客户端传输到服务器

服务器:

 private void handleFileUpload(String fileSizeInBytes, String fileName) throws IOException{ 
     String fullyQualifiedFileName = rootDirectory+System.getProperty("file.separator")+fileName; 
     File fileToWrite = new File(fullyQualifiedFileName); 
     if(fileToWrite.exists()){ 
      fileToWrite.delete(); 
     } 

     int bytesRead = 0; 
     byte[] aByte = new byte[1]; 
     InputStream inputStream = null; 
     FileOutputStream fileOutputStream = null; 
     BufferedOutputStream bufferedOutputStream = null; 
     ByteArrayOutputStream baos = null; 

     try { 
      inputStream = socket.getInputStream(); 
      fileOutputStream = new FileOutputStream(fullyQualifiedFileName); 
      bufferedOutputStream = new BufferedOutputStream(fileOutputStream); 
      bytesRead = inputStream.read(aByte, 0, aByte.length); 
      baos = new ByteArrayOutputStream(); 
      do { 
       baos.write(aByte); 
       bytesRead = inputStream.read(aByte); 
      } while (bytesRead != -1); 

      bufferedOutputStream.write(baos.toByteArray()); 
      bufferedOutputStream.flush(); 
      bufferedOutputStream.close(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 

客户:

  private void uploadFile(Socket socket, File fileToUpload){ 
    byte[] mybytearray = new byte[(int) fileToUpload.length()]; 
    try { 
     FileInputStream fis = new FileInputStream(fileToUpload); 
     BufferedOutputStream toServer = new BufferedOutputStream(socket.getOutputStream()); 
     BufferedInputStream bis = new BufferedInputStream(fis); 
     bis.read(mybytearray, 0, mybytearray.length); 
     toServer.write(mybytearray, 0, mybytearray.length); 
     toServer.flush(); 
     toServer.close(); 
     return; 
    } catch (IOException ex) { 
     handleServerError("upload file", ex); 
     System.exit(0); 
    } 
+0

为什么一次读一个字节?为什么不喜欢'1024'或者少一点.. – 3kings

+0

我尝试了很多方法,似乎都没有工作 – user1154644

+0

'baos = new ByteArrayOutputStream();'这是无所事事......我相信这是你的问题。 – 3kings

回答

0

更改handleFileUpload方法如下

private void handleFileUpload(String fileSizeInBytes, String fileName) throws IOException{ 
     String fullyQualifiedFileName = rootDirectory+System.getProperty("file.separator")+fileName; 
     File fileToWrite = new File(fullyQualifiedFileName); 
     if(fileToWrite.exists()){ 
      fileToWrite.delete(); 
     } 

     int bytesRead = 0; 
     byte[] aByte = new byte[1024]; 
     InputStream inputStream = null; 
     FileOutputStream fileOutputStream = null; 
     BufferedOutputStream bufferedOutputStream = null; 
     ByteArrayOutputStream baos = null; 

     try { 
      inputStream = socket.getInputStream(); 
      fileOutputStream = new FileOutputStream(fullyQualifiedFileName); 
      bufferedOutputStream = new BufferedOutputStream(fileOutputStream); 
      bytesRead = inputStream.read(aByte, 0, aByte.length); 
      while (bytesRead != -1) { 
       bufferedOutputStream.write(aByte, 0, bytesRead); 
       bytesRead = inputStream.read(aByte, 0, aByte.length); 
      } 

      bufferedOutputStream.flush(); 
      bufferedOutputStream.close(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 
相关问题