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

问题(下载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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误通常出现在你的 Java 项目中使用了 Apache Commons Net 库,但是该库没有被正确地添加到类路径中。你需要在项目中添加正确版本的 Apache Commons Net 库。 如果你使用 Maven 进行依赖管理,可以在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.7.2</version> </dependency> ``` 如果你手动管理依赖,可以下载适当版本的 Apache Commons Net 库,并将其添加到类路径中。 如果你已经添加了正确的库但仍然遇到此错误,请确保你的构建工具(例如 Maven 或 Gradle)正在正确地构建项目,并且库已被正确地包含在项目中。 ### 回答2: java.lang.NoClassDefFoundError: org.apache.commons.net.ftp.FTPClient是一个Java异常,表示找不到org.apache.commons.net.ftp.FTPClient类。 这个错误通常发生在类加载器不能在运行时找到所需的类文件时。在这种情况下,出现了一个或多个可能的原因: 1. 缺少依赖项:发生这个错误最常见的原因是缺少所需的依赖项。在这种情况下,你需要确保你的项目中包含了Apache Commons Net库的JAR文件。你可以通过将该库添加到项目的构建路径中来解决此问题。 2. 类路径问题:如果你已经添加了正确的依赖项但仍然发生此错误,可能是由于类路径设置不正确造成的。请确保你的类路径包括了包含所需类文件的路径。 3. 版本不匹配:有时候,当你使用的类库的版本与你项目中的其他依赖项不兼容时,会发生NoClassDefFoundError错误。在这种情况下,你需要确保你所使用的类库的版本与其他依赖项相匹配。 解决这个错误的步骤如下: 1. 检查你的项目中是否包含了正确的依赖项。 2. 确保你的类路径设置正确并且包含了所有必要的类文件。 3. 检查你项目中所有依赖项的版本是否匹配。 如果你按照上述步骤操作仍然无法解决问题,你可以尝试在互联网上搜索更多关于该错误的解决方案或者咨询开发社区的帮助。 ### 回答3: java.lang.NoClassDefFoundError: org.apache.commons.net.ftp.FTPClient是Java中的一个异常错误,表示找不到org.apache.commons.net.ftp.FTPClient类。 在Java开发中,这个错误通常是由于缺少相关的jar包或类路径配置错误引起的。解决这个错误的方法包括: 1. 确保你的项目中包含了org.apache.commons.net.ftp.FTPClient类所在的jar包。这个类通常位于Apache Commons Net库中,你需要将这个jar包添加到你的项目的构建路径中。 2. 检查你的类路径配置是否正确。如果你使用的是Eclipse等IDE,你可以确认你的项目构建路径中包含了Apache Commons Net库。 3. 如果你已经正确导入了jar包并配置了类路径,但仍然出现这个错误,你可以检查一下jar包是否被正确部署到了服务器或者运行环境中。 总而言之,解决java.lang.NoClassDefFoundError: org.apache.commons.net.ftp.FTPClient错误的方法是确保项目中包含了所需的jar包,并配置了正确的类路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值