设为首页 收藏本站
查看: 1477|回复: 0

[经验分享] Apache net自己写的FTP上传整个"目录"的代码(测试通过)

[复制链接]

尚未签到

发表于 2016-6-11 06:11:12 | 显示全部楼层 |阅读模式
  这个方法改进了上一篇的。请各位人事看到后给点评论和意见,看我还有哪些没考虑到的。这个代码不是很完整只是其中最重要的部分把它粘贴出来了。
//上传多个文件夹(文件夹中还有文件夹)
  这里我再次重申一遍,这里写的时候一定要带后面的\\,即是"D:\\hellosite2\\",而不是"D:\\hellosite2"。这点非常重要。一定要切记。另外这个也只适用于Windows的环境下,在Linux下面我正在研究,等出来后我把它粘贴出来。

//uploadManyFile(ftpClient,new File("D:\\helloSite2\\"),"D:\\helloSite2\\");

  //第三个参数localPath是非常重要的,它是我在解决最困难问题时想到的这个解决办法,它可以定位到我程序该什么时候再次跳到上层目录中起到了关键性作用,用它来和现在的目录相比,然后再跳。这段话只是写给我自己看的,呵呵,以免我自己都忘记。
  最核心的代码:

//上传多个文件夹(文件夹中还有文件夹)
//uploadManyFile(ftpClient,new File("D:\\helloSite2\\"),"D:\\helloSite2\\");
//第二和第三个参数的写法,都必须是后面都带上\\的,否则不成功的。
public void uploadManyFile(FTPClient ftpClient,File localFilePath,String localPath,String webSiteName){
try{
System.out.println(localFilePath.getName()+"*******");
File fileList[] = localFilePath.listFiles();
//判断是否是空目录
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);
String ftpWorkingPath = ftpClient.printWorkingDirectory();
if(ftpWorkingPath.length() > webSiteName.length()){
int firstIndex = ftpWorkingPath.indexOf(webSiteName);
ftpWorkingPath = ftpWorkingPath.substring(firstIndex+webSiteName.length(), ftpWorkingPath.length());
}
ftpWorkingPath = ftpWorkingPath.replace("/", "\\");
System.out.println("target="+target+" sign="+sign+" finalTarget="+finalTarget);
System.out.println("ftpWorkingPath="+ftpWorkingPath);
if(finalTarget.equals(ftpWorkingPath)){
System.out.println("zaitiao");
ftpClient.changeToParentDirectory();
}
}
}
}
for(int i=0;i<fileList.length;i++){
File upfile = (File)fileList;
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++){
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);
String ftpWorkingPath = ftpClient.printWorkingDirectory();
if(ftpWorkingPath.length() > webSiteName.length()){
int firstIndex = ftpWorkingPath.indexOf(webSiteName);
ftpWorkingPath = ftpWorkingPath.substring(firstIndex+webSiteName.length(), ftpWorkingPath.length());
}
ftpWorkingPath = ftpWorkingPath.replace("/", "\\");
System.out.println("target="+target+" sign="+sign+" finalTarget="+finalTarget);
System.out.println("ftpWorkingPath="+ftpWorkingPath);
if(finalTarget.equals(ftpWorkingPath)){
System.out.println("zaitiao");
ftpClient.changeToParentDirectory();
}
}
}
}
System.out.println("i==++=="+i);
}
}
}catch(Exception e){
e.printStackTrace();
}
}
  
  下面这个代码可以和上面那个结合起来,用来发布自己可以重新命名的文件到FTP服务器上。

public void createDirectoryName(String webSiteName,FTPClient ftpClient,File localFilePath,String localPath){
try{
ftpClient.makeDirectory(webSiteName);
ftpClient.changeWorkingDirectory(webSiteName);
uploadManyFile(ftpClient,localFilePath,localPath,webSiteName);
}catch(IOException e){
e.printStackTrace();
}
}
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-228778-1-1.html 上篇帖子: 用花生壳架设公网FTP服务器和WEB服务器 下篇帖子: wince下mini2440登陆Telnet和FTP需要密码解决方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表