Apache net自己写的FTP上传整个"目录"的代码(测试通过)

   这个方法改进了上一篇的。请各位人事看到后给点评论和意见,看我还有哪些没考虑到的。这个代码不是很完整只是其中最重要的部分把它粘贴出来了。
//上传多个文件夹(文件夹中还有文件夹)

这里我再次重申一遍,这里写的时候一定要带后面的\\,即是"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[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++){
								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();
		}
		
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值