- 浏览: 1042072 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (279)
- Apache net (10)
- JBoss Rules (3)
- Seam ACL (1)
- Seam (14)
- Seam JPA高级权限验证 (8)
- 待解决的问题.... (1)
- JAVA (43)
- Dwr (4)
- Ajax4JSF (1)
- JavaScript (27)
- 生活小常识 (17)
- Richfaces (3)
- seam自己经历 (14)
- JDBC (1)
- mysql (6)
- WebService (10)
- Java Web (4)
- Hibernate (13)
- J2EE框架整合 (3)
- Spring (9)
- BEA Weblogic (1)
- XML (1)
- log4j (6)
- CSS (2)
- javaIO文件的读写 (5)
- SVN服务器的安装 (5)
- powerDesigner (2)
- SQL常用语句 (3)
- wicket初学 (5)
- eclipse (7)
- 正则表达式 (1)
- ExtJS (6)
- maven(m2eclipse) (1)
- struts2.0 (9)
- JPA (6)
- struts2.0整合spring2.5 (9)
- linux (6)
- Oracle (5)
- Servlet (3)
- MyEclipseGen (0)
最新评论
-
qq_31247573:
JAVA 获取http返回XML的数据 -
jasmine_20100810:
...
linux下tomcat服务的启动、关闭与错误跟踪 -
weiaiFang0624:
视频下载地址:http://download.csdn.net ...
there is no action mapped for namespace / and action name解决办法 -
p476462534:
JS控制表单form的提交 -
dandongsoft:
aaaaaaaaaaaaaaa
httpClient,JAVA访问http request response
上一篇中的那个FTP上传的代码只是适合Window下面的,而今天这个改进就可以即适合Window下,也适合Linux下了。因为我们做的CMS系统是放到Linux下面的,所以当时欠缺考虑,才导致后面的很多的麻烦。
另外我还想在说一点:(1)String ftpWorkingPath = ftpClient.printWorkingDirectory(); 这里是在FTP上打印出当时的路径,也不知道是什么原因FTP默认的把大写的字母全部转化成小写的了,这点是我以前不知道的,也是我从新遇到的新的问题当时一直在找原因,结果被我发现是这个大小写的原因。(2)所以最后要比较equals的话就必须都转化成小写的字母来比较和来截取都必须统一的用小写或者统一的用大写。例如:
int firstIndex = ftpWorkingPath.trim().toLowerCase().indexOf(webSiteName.trim().toLowerCase());
另外还要去掉空格trim(),以前的代码没有用这些,当时没有报错或者错位(也不知道是什么原因没有报错或者错位),但是这次有出现错位,所以在找原因,最后发现是大小写原因。以前的代码是:
int firstIndex = ftpWorkingPath.indexOf(webSiteName);
因为ftpWorkingPath=“/windowtest/aa/bb/cc/” ,而webSiteName="windowTest",所以firstIndex=-1,这个就是最终的原因所在了。(3)另外还有就是在"(指针)跳到上层目录"的时候:
if(finalTarget.trim().toLowerCase().equals(ftpWorkingPath.trim().toLowerCase())){ System.out.println("jumping again ..."); ftpClient.changeToParentDirectory(); }
一定要大小写一致。
下面是所有的FTP上传整个目录或者项目代码:当然这是最核心的代码,另外还有些相关的代码我没有粘贴出来,如果有需要的朋友可以找到我的QQ。
//window and linux public void uploadManyFile(FTPClient ftpClient,File localFilePath,String localPath,String webSiteName){ try{ System.out.println(localFilePath.getName()+"*******"); System.out.println("localPath:"+localPath); System.out.println("localFilePath:"+localFilePath.getName()+"-"+localFilePath.getAbsolutePath()); System.out.println("webSiteName:"+webSiteName); File fileList[] = localFilePath.listFiles(); //null directory if(fileList.length <= 0){ ftpClient.changeToParentDirectory(); System.out.println("AbsolutePathList Size 1:"+AbsolutePathList!=null?AbsolutePathList.size():null); for(int m=0;m<AbsolutePathList.size();m++){ for(int k=0;k<AbsolutePathList.size();k++){ String target = AbsolutePathList.get(k).substring(localPath.length()-2, AbsolutePathList.get(k).length()); int sign = target.lastIndexOf(fileName.get(k)); String finalTarget = target.substring(0, sign-1); finalTarget = finalTarget.replace("\\", ""); String ftpWorkingPath = ftpClient.printWorkingDirectory(); if(ftpWorkingPath.length() > webSiteName.length()){ int firstIndex = ftpWorkingPath.trim().toLowerCase().indexOf(webSiteName.trim().toLowerCase()); ftpWorkingPath = ftpWorkingPath.substring(firstIndex+webSiteName.length(), ftpWorkingPath.length()); } ftpWorkingPath = ftpWorkingPath.replace("/", ""); System.out.println("target"+k+"="+target+" sign="+sign+" finalTarget="+finalTarget); System.out.println("ftpWorkingPath"+k+"="+ftpWorkingPath); if(finalTarget.trim().toLowerCase().equals(ftpWorkingPath.trim().toLowerCase())){ System.out.println("jumping again"); ftpClient.changeToParentDirectory(); } } } } for(int i=0;i<fileList.length;i++){ File upfile = (File)fileList[i]; if(upfile.isDirectory()){ System.out.println(upfile.getName()+"---"); System.out.println("jinlai"); if(i+1 == fileList.length){ System.out.println("aa3-absolute="+upfile.getAbsolutePath()); AbsolutePathList.add(upfile.getAbsolutePath()); fileName.add(upfile.getName()); } ftpClient.makeDirectory(upfile.getName()); ftpClient.changeWorkingDirectory(upfile.getName()); uploadManyFile(ftpClient,upfile,localPath,webSiteName); }else{ System.out.println(localFilePath.getName()+"****&&***"); System.out.println(upfile.getName()+"--+++"); System.out.println(localFilePath.getPath()+"\\"+upfile.getName()); String localFileRealPath = localFilePath.getPath()+"/"+upfile.getName(); uploadRealFile(ftpClient,new File(localFileRealPath)); System.out.println("i="+ i); System.out.println("fileList.length="+fileList.length); if(i+1 == fileList.length){ ftpClient.changeToParentDirectory(); for(int m=0;m<AbsolutePathList.size();m++){ for(int k=0;k<AbsolutePathList.size();k++){ System.out.println("localPath="+localPath+" AbsolutePathList.get(0)="+AbsolutePathList.get(0)); String target = AbsolutePathList.get(k).substring(localPath.length()-2, AbsolutePathList.get(k).length()); System.out.println("target="+target); int sign = target.lastIndexOf(fileName.get(k)); System.out.println("fileName.get(0)="+fileName.get(0)+" sign="+sign); String finalTarget = target.substring(0, sign-1); finalTarget = finalTarget.replace("\\", ""); System.out.println("finalTarget="+finalTarget); String ftpWorkingPath = ftpClient.printWorkingDirectory(); System.out.println("ftpWorkingPath1="+ftpWorkingPath); if(ftpWorkingPath.length() > webSiteName.length()){ System.out.println("webSiteName====="+k+webSiteName); int firstIndex = ftpWorkingPath.trim().toLowerCase().indexOf(webSiteName.trim().toLowerCase()); System.out.println("firstIndex="+firstIndex+" webSiteName="+webSiteName+" webSiteName.length="+webSiteName.length()); ftpWorkingPath = ftpWorkingPath.trim().toLowerCase().substring(firstIndex+webSiteName.length(), ftpWorkingPath.length()); } ftpWorkingPath = ftpWorkingPath.replace("/", ""); System.out.println("ftpWorkingPath3="+ftpWorkingPath); if(finalTarget.trim().toLowerCase().equals(ftpWorkingPath.trim().toLowerCase())){ System.out.println("jumping again ..."); ftpClient.changeToParentDirectory(); } } } } } } }catch(Exception e){ e.printStackTrace(); } }
我利用上面的代码来上传到FTP服务器上,可以上传成功但是当我运行时就不能运行了,因为我上传的模板是可以放到Tomcat下面跑起来的,结果它总是报告错误。郁闷中.... 如何发现问题的原因的?这才是问题的重点为什么我能想到是传输过程中没有设置传输的格式类型呢? 那是因为我在FTP上打开我传输的JAR包结果发现总是报告文件损坏,所有就想到了问题的解决办法了。 后来我发现了问题所在:是代码的问题,缺少了以下代码:
this.connectServer(); this.setFileType(FTP.BINARY_FILE_TYPE); /** * 设置传输文件的类型[文本文件或者二进制文件] * * @param fileType * --BINARY_FILE_TYPE、ASCII_FILE_TYPE */ public void setFileType(int fileType) { try { ftpClient.setFileType(fileType); } catch (Exception e) { e.printStackTrace(); } }
前面的代码放在Linux下面运行,还是出现了一些小问题:然后开始寻找错误的原因,其中一点是:(1)为了和Windows、Linux下面都兼容,所以我加入了以下代码:
if(i+1 == fileList.length){ System.out.println("aa3-absolute="+upfile.getAbsolutePath()); if(upfile.getAbsolutePath().indexOf("/") == 0){ AbsolutePathList.add(upfile.getAbsolutePath()); }else{ String newStr = ""; StringBuffer sb = new StringBuffer(newStr); newStr = sb.append("/").append(upfile.getAbsolutePath()).toString(); AbsolutePathList.add(newStr); } fileName.add(upfile.getName()); }
(1)添加上述代码的原因是:我在打印的结果中发现 localPath=/usr/local/jboss-4.2.2.GA/server/default/deploy/cms-ear.ear/cms.war/website/LinuxTest/ AbsolutePathList.get(k)=/usr/local/jboss-4.2.2.GA/server/default/deploy/cms-ear.ear/cms.war/website/LinuxTest/WEB-INF/classes/cn/ctit/cms/service/webapp 如果是windows的话: AbsolutePathList.get(k)=usr/local/jboss-4.2.2.GA/server/default/deploy/cms-ear.ear/cms.war/website/LinuxTest/WEB-INF/classes/cn/ctit/cms/service/webapp 所以才加了上面的代码。
第二点发现的问题是:(2)在Linux下面还出现了错位。原因:我又加入了以下代码:
finalTarget = finalTarget.replace("\\", ""); finalTarget = finalTarget.replace("/", ""); //多加了这么一行,这也是和linux下面兼容
(2)加入上述代码原因: finalTarget = finalTarget.replace("\\", ""); finalTarget = finalTarget.replace("/", ""); 上面那个仅仅是替换掉Windows下面的斜杠,但是Linux下面没有替换,所以才加入了下面那个代码。
最后终于测试通过了,哈哈。所有的代码如下:下面的代码才是真正的适合Windows和Linux的FTP上传的代码。
//window and linux public void uploadManyFile(FTPClient ftpClient,File localFilePath,String localPath,String webSiteName){ try{ File fileList[] = localFilePath.listFiles(); //exist null directory if(fileList.length <= 0){ ftpClient.changeToParentDirectory(); for(int m=0;m<AbsolutePathList.size();m++){ for(int k=0;k<AbsolutePathList.size();k++){ String target = AbsolutePathList.get(k).substring(localPath.length()-1, AbsolutePathList.get(k).length()); int sign = target.lastIndexOf(fileName.get(k)); String finalTarget = target.substring(0, sign-1); finalTarget = finalTarget.replace("\\", ""); String ftpWorkingPath = ftpClient.printWorkingDirectory(); if(ftpWorkingPath.length() > webSiteName.length()){ int firstIndex = ftpWorkingPath.trim().toLowerCase().indexOf(webSiteName.trim().toLowerCase()); ftpWorkingPath = ftpWorkingPath.substring(firstIndex+webSiteName.length(), ftpWorkingPath.length()); } ftpWorkingPath = ftpWorkingPath.replace("/", ""); System.out.println("target"+k+"="+target+" sign="+sign+" finalTarget="+finalTarget); System.out.println("ftpWorkingPath"+k+"="+ftpWorkingPath); if(finalTarget.trim().toLowerCase().equals(ftpWorkingPath.trim().toLowerCase())){ System.out.println("jumping again"); ftpClient.changeToParentDirectory(); } } } } for(int i=0;i<fileList.length;i++){ File upfile = (File)fileList[i]; if(upfile.isDirectory()){ System.out.println(upfile.getName()+"---"); System.out.println("jinlai"); if(i+1 == fileList.length){ System.out.println("aa3-absolute="+upfile.getAbsolutePath()); if(upfile.getAbsolutePath().indexOf("/") == 0){ AbsolutePathList.add(upfile.getAbsolutePath()); }else{ String newStr = ""; StringBuffer sb = new StringBuffer(newStr); newStr = sb.append("/").append(upfile.getAbsolutePath()).toString(); AbsolutePathList.add(newStr); } fileName.add(upfile.getName()); } ftpClient.makeDirectory(upfile.getName()); ftpClient.changeWorkingDirectory(upfile.getName()); uploadManyFile(ftpClient,upfile,localPath,webSiteName); }else{ System.out.println(localFilePath.getName()+"****&&***"); System.out.println(upfile.getName()+"--+++"); System.out.println(localFilePath.getPath()+"/"+upfile.getName()); String localFileRealPath = localFilePath.getPath()+"/"+upfile.getName(); uploadRealFile(ftpClient,new File(localFileRealPath)); System.out.println("i="+ i); System.out.println("fileList.length="+fileList.length); if(i+1 == fileList.length){ ftpClient.changeToParentDirectory(); for(int m=0;m<AbsolutePathList.size();m++){ for(int k=0;k<AbsolutePathList.size();k++){ System.out.println("localPath="+localPath+" AbsolutePathList.get(0)="+AbsolutePathList.get(0)); System.out.println("AbsolutePathList.get(k)="+AbsolutePathList.get(k)+" k="+k+" localPath.length()="+localPath.length()); String target = AbsolutePathList.get(k).substring(localPath.length()-1, AbsolutePathList.get(k).length()); System.out.println("target="+target); int sign = target.lastIndexOf(fileName.get(k)); System.out.println("sign="+sign); String finalTarget = target.substring(0, sign-1); finalTarget = finalTarget.replace("\\", ""); finalTarget = finalTarget.replace("/", ""); System.out.println("finalTarget="+finalTarget); String ftpWorkingPath = ftpClient.printWorkingDirectory(); System.out.println("ftpWorkingPath1="+ftpWorkingPath); if(ftpWorkingPath.length() > webSiteName.length()){ System.out.println("webSiteName====="+webSiteName); int firstIndex = ftpWorkingPath.trim().toLowerCase().indexOf(webSiteName.trim().toLowerCase()); System.out.println("firstIndex="+firstIndex+" webSiteName="+webSiteName+" webSiteName.length="+webSiteName.length()); ftpWorkingPath = ftpWorkingPath.trim().toLowerCase().substring(firstIndex+webSiteName.length(), ftpWorkingPath.length()); } ftpWorkingPath = ftpWorkingPath.replace("/", ""); System.out.println("ftpWorkingPath3="+ftpWorkingPath); if(finalTarget.trim().toLowerCase().equals(ftpWorkingPath.trim().toLowerCase())){ System.out.println("jumping again ..."); ftpClient.changeToParentDirectory(); } } } } } } }catch(Exception e){ e.printStackTrace(); } }
发表评论
-
FTP状态代码说明及PORT模式和PASV模式比较
2009-08-12 15:39 1973PORT模式和PASV模式 PORT模式下的FTP服务: ... -
ftpClient解决中文乱码问题
2009-08-12 15:27 10452ftpClient.setControlEncoding(&q ... -
ftpClient链接成功后程序一直停在那没有反应
2009-08-12 14:57 13724今天碰到很奇怪的 ... -
上传的控件把它以byte[]的形式保存到本地的硬盘中
2009-08-06 15:58 1214(1)页面: <s:decorate id=" ... -
FTP中经常会报"空指针异常"
2009-07-29 15:51 4573FTP中经常会报"空指针异常",这个 ... -
java.net.SocketException: Connection reset by peer: socket write error
2009-07-02 10:29 8518在用FTP上传大文件时报错误信息:java.net.S ... -
Apache net自己写的FTP上传整个"目录"的代码(测试通过)
2009-06-29 13:30 1965这个方法改进了上一篇的。请各位人事看到后给点评论和意见, ... -
Apache net java我自己写的FTP上传整个目录的代码
2009-06-25 11:59 2192代码不完整,如果有需要可以联系我。 public static ... -
请问哪位高手知道用Apache Commons Net包实现javaFTP上传目录功能
2009-06-23 11:24 1525请问哪位高手知道用Apache Commons Net包实现j ...
相关推荐
apache实现ftp上传
从零开始介绍Apache FtpServer,并一步一步教你配置Apache FtpServer,更高级的应用,教你用写代码控制Apache FtpServer及集成到自己的应用中 <!--ftp端口 --> <!--绑定的服务器IP地址,多网卡的时候使用...
ApacheCamel-FTP ApacheCamel-FTP Apache Camel FTP组件 Demo 样例
Apache Ftpserver 全套,包括源码, jar包 及配置说明,需要的就下载吧
基于Apache FtpServer 的Ftp服务器实现,使用了srping集成的方式来实现的。
FTP应用的jar包,主要用于java开发FTP上传下载
apache-ftpserver apache-ftpserver apache-ftpserver
Apache FtpServer是一个100%纯Java的、基于现有开放式协议基础上、完整、小巧的FTP服务器。此外,FtpServer还可以作为Windows服务器、Unix / Linux后台程序或是被嵌入在Java应用程序而独立运行。有了MINA...
Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)
红帽子4.0的linux-apache,ftp架设
org.apache.commons.net.ftp.FTPClient包,不错,在实际项目和产品中使用过。
org.apache.commons.net.ftp.FTPClient FTP工具类,实现上传、下载、压缩到输出流下载等功能
Java程序使用Apache的commons-net-3.0.jar包中的org.apache.commons.net.ftp.FTPClient类实现对ftp上传、下载、删除等操作,是一个不错的东西哦
基于 Apache Commons Net 实现javaFTP上传.pdf
Apache_FtpServer配置详解
该资源提供了与Apache配合使用的FTP服务器安装包,支持FTP服务的构建。
Apache FTPClient操作FTP工具类
.net.ftp.FTPClient jar ,exaple, commons-net-2.0.jar
https://blog.csdn.net/feiwei/article/details/5867555 根据这个博客重新编译的,可以解决IE访问Apache Ftp Server 中文目录、中文文件名乱码的问题
apache_ftp 开发包.rar commons-net-3.3.jar