`

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();
		}
		
	}

 

分享到:
评论

相关推荐

    ftp上传下载源代码

    FTP(File Transfer Protocol)是一种基于TCP/IP协议的网络协议,用于在网络上进行...以上是FTP上传下载源代码中可能涉及的关键知识点,通过学习和理解这些代码,开发者可以掌握如何在Java环境中实现FTP客户端功能。

    java ftp 上传下载,代码。

    以上就是使用Java进行FTP上传和下载的基本步骤,结合Apache Commons Net库和WinFtp Server2.0.1,你可以创建一个完整的FTP客户端程序进行实践。在实际应用中,你可能还需要处理各种异常情况,如网络中断、文件权限...

    FTP上传测试工具 java

    在这个场景中,"FTP上传测试工具 java" 提供了一种基于Java语言的解决方案,用于测试FTP功能和验证与客户的FTP通信需求。Java作为一种通用且跨平台的编程语言,提供了丰富的库和API来实现FTP客户端功能。 首先,...

    (转)Java使用Apache FtpServer实现嵌入式FTP服务器

    Java使用Apache FtpServer实现嵌入式FTP服务器是一项常见的任务,尤其在开发集成测试或部署自动化流程时。Apache FtpServer是一个开源项目,它提供了一个轻量级且可嵌入的FTP服务器,允许开发者在Java应用程序中直接...

    基于Java的FTP客户端源代码

    Java FTP客户端源代码是用于通过Java编程语言与FTP(文件传输协议)服务器进行交互的程序。FTP是一种在互联网上常用的标准文件传输协议,允许用户上传、下载和管理远程服务器上的文件。Java提供了一系列的API,如`...

    Java的FTP任务代码实例

    【Java FTP任务代码实例】 在Java编程中,FTP(File Transfer Protocol)被广泛用于在网络间传输文件。Apache Commons Net库提供了方便的API来处理FTP任务。以下是一个详细的FTP操作类的实例,它涵盖了连接、登录、...

    apache common net包 和相关的测试代码

    这包括连接管理、文件上传和下载、目录浏览等功能。 "net"标签则涵盖了更广泛的网络协议支持。除了telnet和FTP之外,Apache Commons Net还提供了NNTP、SMTP以及其他网络通信协议的实现。例如,NNTP用于新闻组,SMTP...

    FTP客户端源代码

    FTP客户端源代码是一种用于与FTP(文件传输协议)服务器交互的应用程序,允许用户上传、下载文件或管理远程服务器上的文件。在本项目中,我们关注的是一个专为Windows平台设计的FTP客户端,它使用Java语言编写,并且...

    FTP上传下载代码

    5. 测试类或主类:用于测试整个FTP上传下载流程,不依赖于浏览器环境,可以直接运行查看功能是否正常。 6. 其他辅助类:可能包括异常处理、日志记录、进度条显示等功能。 为了运行这个Java工程,你需要按照以下...

    java实现本地按照FTP服务器上目录结构创建文件夹下载文件

    对于FTP操作,我们可以使用Apache Commons Net库,这是一个强大的Java FTP客户端库,提供了丰富的FTP功能,包括文件上传、下载以及目录操作。 1. **安装Apache Commons Net库**:在项目中添加Apache Commons Net...

    JAVA操作FTP文件服务器上传与下载文件

    Apache Commons Net是Apache软件基金会提供的一组网络协议实用工具,包括对FTP协议的支持。 1. **连接FTP服务器**: 首先,需要创建一个`FTPClient`实例,并使用`connect(String server)`方法连接到FTP服务器。...

    Java常用FTP文件操作说明 Apache.FTPClient,ftp4j,jftp

    使用Apache FTPClient,你可以执行基本的FTP操作,如登录服务器、改变工作目录、上传和下载文件、断点续传等。以下是一个简单的示例: ```java import org.apache.commons.net.ftp.*; FTPClient client = new ...

    Java FTP 指定下载文件和上传文件到指定的服务器目录

    在本篇文章中,我们将详细介绍如何使用Java编程语言通过FTP(文件传输协议)实现文件的上传与下载功能,并能够将文件指定上传或下载到特定的服务器目录下。此方法已经过测试验证,能够满足基本的需求,并且代码易于...

    Android 通过ftp上传文件获取上传速度及进度

    通过以上步骤,你可以在Android应用中实现FTP文件上传,并实时显示上传进度和速度。记得在`AndroidManifest.xml`中添加Internet权限: ```xml ``` 这个名为`sppedtest`的压缩包可能包含了示例代码或者测试文件,...

    利用ftp协议进行文件的上传下载

    5. FTP上传下载示例: - 上传文件: ```java FileInputStream fis = new FileInputStream(localFilePath); ftpClient.storeFile(remoteFilePath, fis); fis.close(); ``` - 下载文件: ```java ...

    java 实现ftp上传下载

    总结来说,Java实现FTP上传下载涉及连接管理、文件操作、多线程处理、异常处理等多个方面。使用Apache Commons Net库能简化这些操作,但正确地处理细节和异常情况仍然至关重要。通过理解和实践这些知识点,你将能够...

    用JAVA实现Ftp文件上传下载

    在`TestFtpUpload`文件中,可以编写单元测试或集成测试来验证FTP上传和下载功能。例如,你可以创建一个测试类`FtpOperationsTest`,包含如下方法: ```java import org.junit.jupiter.api.Test; import org.apache....

    java连接apache的FTP包commons-net-1.4.1.jar,jakarta-oro-2.0.8.jar

    Java连接Apache FTP服务器主要依赖于两个关键的JAR包:`commons-net-1.4.1.jar`和`jakarta-oro-2.0.8.jar`。这两个库提供了丰富的功能,使得Java开发者能够轻松地处理FTP(文件传输协议)通信。 `commons-...

    java实现ftp文件上传及下载源码

    在本资源中,提供了实现FTP文件上传和下载功能的源码,包括了FTP连接、文件上传和下载的逻辑,以及相关的测试方法。下面我们将详细探讨这些知识点。 1. FTP连接: FTP连接是通过建立TCP连接到FTP服务器来实现的。...

    FTP上传文件需要的jar

    在这个场景下,"FTP上传文件需要的jar" 提供了两个必要的jar包文件,它们包含了处理FTP连接和文件传输的类和方法。 这两个jar包可能包括Apache Commons Net库和/或其他FTP客户端库,如JSch或Java内置的java.net包。...

Global site tag (gtag.js) - Google Analytics