`

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

阅读更多

       需求:使用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]);
}

 

 

分享到:
评论

相关推荐

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

    在Java编程环境中,实现从FTP(File Transfer Protocol)服务器上按照其目录结构创建本地文件夹并下载文件是一项常见的任务。FTP是一种用于在网络上传输文件的标准协议,它允许用户从远程服务器上获取或发送文件。本...

    Ftp上传文件和文件夹

    总结来说,C#环境下FTP文件上传涉及的关键知识点有:FTP协议,System.Net.FtpWebRequest类的使用,网络凭据的设置,文件读取和流操作,以及可能的递归处理来上传文件夹。在实际项目中,根据需求选择合适的方法和库,...

    Java中FTPClient上传中文目录、中文文件名乱码问题解决方法

    在Java编程中,使用FTPClient进行文件传输时,可能会遇到一个常见的问题,即当尝试创建中文目录或上传具有中文名称的文件时,这些目录名和文件名会显示为乱码,通常表现为“??”这样的形式。这个问题主要是由于FTP...

    FTPClient_src.zip_ FTPClient_src_FTPCLient_src

    在文件列表中只有一个条目:FTPClient,这可能是项目的主要源代码文件夹或者可执行文件。通常,一个C++项目会包含多个源代码文件(.cpp)、头文件(.h)、资源文件(如.rc用于GUI设计)和其他配置文件。这些文件共同...

    java多线程ftp 上传下载

    10. **继续上传/下载(根据文件名为ContinueFTP2.java推测)**:在实际应用中,可能会遇到网络中断或其他异常导致的传输中断,这时可以使用`FTPClient`的`abort()`方法停止当前传输,然后在稍后的时间点重新尝试。...

    FTP 550 Permission denied 只能建文件夹,没法删除及上传文件的原因说明

    当你遇到“FTP 550 Permission denied”错误时,这意味着你没有足够的权限执行特定的FTP操作,如删除文件或上传文件。这通常与用户角色、路径设置以及权限配置有关。 **原因分析:** 1. **用户角色和权限**:FTP...

    FF.zip 基于qt的ftp客户端显示服务器文件、上传、下载

    3. **FtpClient类**:在Qt中,QNetworkAccessManager和QNetworkReply类用于处理网络请求,而针对FTP,我们可以自定义一个FtpClient类,封装FTP相关的操作,如连接、登录、获取目录列表、下载文件、上传文件等。...

    FTP文件上传、下载、删除

    在进行FTP操作时,可能会遇到各种异常情况,如网络连接问题、文件不存在等。因此,在编写程序时应充分考虑异常处理机制,以确保程序的健壮性和稳定性。 ```java try { // FTP操作 } catch (IOException e) { e....

    C#开发的文件同步工具

    C#中可以使用System.Net.FtpClient库来实现FTP功能,包括登录、列出目录、上传和下载文件等操作。 3. 文件夹路径配置:在C#应用程序中,通常会使用app.config文件来存储配置信息,如连接字符串、API密钥等。在这个...

    java ftp操作

    7. **异常处理**:在执行FTP操作时,可能会遇到网络问题、权限问题或文件不存在等问题,因此需要适当地捕获并处理`FTPException`、`IOException`等相关异常。 8. **安全考虑**:在实际应用中,应考虑使用FTPS(FTP ...

    java使用ftp上传文件示例分享

    6. **异常处理**:在上传过程中可能会遇到网络问题、权限问题等,因此需要捕获并处理可能抛出的异常,如`SocketException`、`IOException`等。 7. **关闭连接**:在完成文件传输后,必须断开FTP连接,释放资源。...

    java基于Apache FTP实现文件上传、下载、修改文件名、删除

    - **FTPFile Delete**:使用FTPClient的`deleteFile()`方法,可以删除FTP服务器上的文件。确保在调用该方法前检查文件是否存在,以防止不必要的错误。 5. **FTP文件操作状态枚举类**: - 在示例代码中,定义了一...

    asp.net 2.0(c#)下简单的FTP应用程序

    例如,要上传文件,我们需要创建一个`FtpWebRequest`实例,设置其`Method`属性为`"STOR"`,然后使用`GetRequestStream`方法获取上传流,将文件数据写入流中。 下载文件的过程则相反,使用`Method`为`"RETR"`的`...

    FTP client

    8. **错误处理**:当遇到网络错误或其他问题时,客户端应能够优雅地处理并通知用户。 9. **安全性**:尽管FTP的基本协议不加密数据,但FTP客户端通常支持更安全的FTP变种,如FTPS(FTP over TLS/SSL)和SFTP(SSH ...

    asp.net FTP客户端设计与开发(源代码+LW).zip

    7. **其他辅助功能**:例如,`openF.bmp`可能用于打开本地文件夹,以便用户浏览和选择要上传的文件。 通过这个项目,开发者可以学习到如何使用ASP.NET中的类库(如System.Net.FtpClient)和FTP命令来实现客户端功能...

Global site tag (gtag.js) - Google Analytics