欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于使用FTPClient创建文件夹并上传文件遇到的问题

程序员文章站 2024-01-22 16:33:52
...

       需求:使用FTPClient,根据上传文件和需要存放的文件目录,若FTP服务端不存在指定的文件目录,则创建;否则直接将文件保存至对应的文件目录中。

       测试:感觉问题不大,直接写代码,做测试用例。用JAVA第三方的FTPClient作为工具,主要代码如下:

public boolean FtpUpload(String fileName, String file, String fileDir) {
	FTPClient ftp = new FTPClient();
        // 创建FTP连接,登录,根据返回码,测试连接是否成功,此处省略.......

        // 主要是下面代码:
        if(fileDir != null) {
                ftp.makeDirectory(fileDir);// 创建文件目录
		ftp.changeWorkingDirectory(fileDir);// 切换至文件目录准备上传
         }

          // 下面省略一万字........
}
因为本机为windows开发环境,顺便正好有ftp服务端,测试:
FtpUpload("test.txt", "E:\\test.txt", "/DirA/DirB");

       一切顺利,如愿在FTP目录/DirA/DirB不存在的情况下,创建目录并将test.txt写入DirB目录下。

       接下来更换Linux下发布的FTP服务,再用测试用例测试,发现创建目录返回false,无法创建目录,也无法切换至指定目录?难道是linux权限问题?

       经过测试,在排除了权限问题等,查看API,通过调用FTPClient.printWorkingDirectory()函数,发现使用windows发布的FTP服务,打印的路径为“/”,而用linux发布的FTP服务,打印的路径为“/home/ftp/”,为FTP的全路径。

       在这个情况下,使用相对路径去创建FTP目录,如下:

FtpUpload("test.txt", "E:\\test.txt", "DirA");

       顺利创建文件目录,并将文件写入DirA目录下。

       最后在调试过程中,还是无法通过指定"/DirA/DirB"方式,批量创建文件目录,但通过间接的方法可以搞定。

      所谓间接方式,就是类似这样:

//将文件目录按路径分隔符读取,然后分别创建
String[] ftppaths = ftppath.split("/");
for(int i=0; i<ftppaths.length; i++) {
	ftp.makeDirectory(ftppaths[i]);
	ftp.changeWorkingDirectory(ftppaths[i]);
}

 

 

相关标签: ftp linux windows