FTP-org.apache.commons.net.io.CopyStreamException: IOException caught while copying.

来源:互联网 发布:带着淘宝穿古代微盘 编辑:程序博客网 时间:2024/05/21 07:10

问题(下载ftp文件):

写一个ftp下载程序,出现很怪异的错误,写得过程中会出现空指针, 

有时候又出现java.net.SocketTimeoutException: Read timed out,

还会出现org.apache.commons.net.io.CopyStreamException: IOException caught while copying. 




Java代码  收藏代码
  1. public void run() {  
  2.   
  3.         ftpClient.enterLocalPassiveMode();  
  4.         OutputStream outputStream = null;  
  5.         try {  
  6.             ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
  7.   
  8.             ftpClient.changeWorkingDirectory(path);// 转移到FTP服务器目录  
  9.   
  10.             FTPFile[] fs = ftpClient.listFiles(); // 得到目录的相应文件列表  
  11.   
  12.             for (int i = 0; i < fs.length; i++) {  
  13.   
  14.                 FTPFile ff = fs[i];  
  15.                 if (ff.getName().equals(fileName)) {  
  16.   
  17.                     System.out.println(ff.getName());  
  18.   
  19.                     String filename = fileName;  
  20.   
  21.                     // 这个就就是弹出下载对话框的关键代码  
  22.                     // response.setContentType("application/octet-stream");  
  23.   
  24.                     response.setHeader("Content-disposition",  
  25.   
  26.                     "attachment;filename="  
  27.   
  28.                     + URLEncoder.encode(filename, "utf-8"));  
  29.   
  30.                     // 将文件保存到输出流outputStream中  
  31.                     InputStream in = ftpClient.retrieveFileStream(new String(ff  
  32.                             .getName().getBytes("GBK"), "ISO-8859-1"));  
  33.   
  34.                     outputStream = response.getOutputStream();  
  35.   
  36.                     int len = 0;  
  37.                     long size = 0;  
  38.                     long t = 16364;  
  39.                     byte[] bt = new byte[1024];  
  40.                     while ((len = in.read(bt)) > 0) {  
  41.   
  42.                         outputStream.write(bt, 0, len); // outputStream.flush();  
  43.                         size = size + len;  
  44.   
  45.                         System.out.println(this.fileName + "已xiazai :" + size);  
  46.   
  47.                     }  
  48.                     /* 
  49.                      * // response.s File file = new File("d:/123456.com"); // 
  50.                      * response.reset();response //response. outputStream = 
  51.                      * response.getOutputStream(); // new 
  52.                      * FileOutputStream(file); boolean boo = false; if 
  53.                      * (outputStream != null) { boo = ftpClient 
  54.                      * .retrieveFile(ff.getName(), outputStream); } 
  55.                      */  
  56.                     // System.out.println(boo);  
  57.                     // in.close();  
  58.                     // os.close();  
  59.   
  60.                     outputStream.flush();  
  61.   
  62.                       
  63.                 }  
  64.   
  65.             }  
  66.   
  67.         } catch (IOException e) {  
  68.             // TODO Auto-generated catch block  
  69.             e.printStackTrace();  
  70.         } finally {  
  71.             try {  
  72.                 outputStream.close();  
  73.             } catch (IOException e) {  
  74.                 // TODO Auto-generated catch block  
  75.                 e.printStackTrace();  
  76.             }  
  77.             FTPUtil.disconnect(ftpClient);  
  78.   
  79.         }  



org.apache.commons.net.io.CopyStreamException: IOException caught while copying. 
at org.apache.commons.net.io.Util.copyStream(Util.java:127) 
at org.apache.commons.net.ftp.FTPClient.retrieveFile(FTPClient.java:1295) 
at com.yniso.filesystem.DownloadFTPFile.run(DownloadFTPFile.java:92) 






rrrrr.kk 
java.net.SocketTimeoutException: Read timed out 
at java.net.SocketInputStream.socketRead0(Native Method) 
at java.net.SocketInputStream.read(Unknown Source) 
at java.io.BufferedInputStream.read1(Unknown Source) 
at java.io.BufferedInputStream.read(Unknown Source) 
at java.io.BufferedInputStream.fill(Unknown Source) 
at java.io.BufferedInputStream.read(Unknown Source) 
at org.apache.commons.net.telnet.TelnetInputStream.__read(TelnetInputStream.java:114) 
at org.apache.commons.net.telnet.TelnetInputStream.run(TelnetInputStream.java:535) 
at java.lang.Thread.run(Unknown Source) 


Demo.rar 
Demo.rar已xiazai :1024 
Demo.rar已xiazai :2048 
Demo.rar已xiazai :3072 
Demo.rar已xiazai :4096 
Demo.rar已xiazai :5120 
Demo.rar已xiazai :6144 
Demo.rar已xiazai :7168 
Demo.rar已xiazai :8192 
Demo.rar已xiazai :9216 
Demo.rar已xiazai :10240 
Demo.rar已xiazai :11264 
Demo.rar已xiazai :12288 
Demo.rar已xiazai :13312 
Demo.rar已xiazai :14336 
Demo.rar已xiazai :15360 
Demo.rar已xiazai :16384 
Exception in thread "Thread-22" java.lang.NullPointerException 
at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:740) 
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434) 
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:349) 
at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:764)
at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:124) 
at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:573) 
at org.apache.coyote.Response.doWrite(Response.java:560) 
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353) 
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434) 
at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:309) 
at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:273) 
at org.apache.catalina.connector.CoyoteOutputStream.close(CoyoteOutputStream.java:104) 

at com.yniso.filesystem.DownloadFTPFile.run(DownloadFTPFile.java:120) 



分析原因:经反复测试这异常好像都是因为网络的问题,因为网络不稳定下载直接被迫中断了

阅读全文
0 0
原创粉丝点击