0 0

apache commons-net ftpClient listFiles方法诡异问题5

问题:使用ftpClient listFiles方法来判断文件的存在性,代码如上,自己的测试机上是ok的,但现网出现不稳定现象,2000个路径验证,循环验证,第一次出现十几个 验证不存在(其实文件存在,权限也没问题),第二次再验证,不存在的个数会增加,以此类推,但过几分钟,再执行验证,不存在的个数又会降下来,感觉很诡异。

 

public static boolean fileExist(String filepath)
{
    FTPClient ftpClient = ftpContext.get();
    String path = "";

    if(filepath.startsWith("/"))
    {
        path = filepath.substring(1,filepath.length());
    }
    else
    {
        path = filepath;
    }

    logger.warn("this full file path is ["+FtpUtil.currentWorkspace(false)+"/"+path+"] ");

    try {
        path = new String(path.getBytes(ENCODE_TYPE),"ISO-8859-1") ;
    } catch (UnsupportedEncodingException e1) {
        logger.error(e1.getMessage());
    }

    // filepath该路径对应的文件数组
    FTPFile[] files = null;

    try {
        files = ftpClient.listFiles(path,
            new FTPFileFilter() {
                public boolean accept(FTPFile ftpFile) {
                    return ftpFile.isFile();
                }
            }
        );
    } catch (IOException e) {
        logger.error(e.getMessage(), e);
    }

    // 文件数组为空或长度小于等于0,代表文件不存在
    if(files == null || files.length <= 0)
    {
        return false;
    }

    return true;
}

 麻烦各位给点建议,谢谢啦^_^!

2012年8月14日 00:03

3个答案 按时间排序 按投票排序

0 0

采纳的答案

在login()后加上这句
ftpClient.enterLocalPassiveMode();//important

2012年8月20日 16:45
0 0

我之前也写过类似的,最后尝试直接使用listFile的入参为全路径测试,貌似是可以的,不妨试试,代码如下:

public static boolean exists(String path) {
		FTPClient client = ftpContext.get() ;
		if(client == null) {
			return false ;
		}
		try {
			 FTPFile[] files = client.listFiles(ROOT_PATH.get() + new String(path.getBytes(ENCODE_TYPE),"ISO-8859-1")) ;
			 return files.length > 0 ;
		} catch (IOException e) {
			logger.error("Exception occured when check the FTP File["+path+"] is exist : " + e.getMessage()) ;
		}
		return false ;
	}

2012年8月22日 16:30
0 0

是不是文件名有中文?

2012年8月14日 10:30

相关推荐

    commons-net-3.6.jar

    此外,还有例如listFiles()用于获取远程目录列表,changeWorkingDirectory()切换当前工作目录等,满足了FTP交互的各种需求。 二、FTP传输模式 FTP支持两种主要的传输模式:ASCII模式和二进制模式。在Apache ...

    commons-net-ftp-2.0.jar.zip

    此外,还可以使用`listFiles()`来获取服务器目录中的文件列表,或者`changeWorkingDirectory()`改变当前工作目录。 然而,需要注意的是,如果在JDK 1.7以上的版本中使用这个库,可能会遇到一些方法的变更。由于Java...

    commons-net-3.3.jar

    通过FTPClient的listFiles()方法,我们可以获取当前工作目录下的文件和目录列表。FTPFile对象提供了丰富的属性,如文件名、大小、日期、类型等,方便我们进行文件管理和筛选。 四、文件上传与下载 Apache Commons ...

    Android 利用commons-net-3.3实现ftp上传下载Demo

    implementation 'org.apache.commons:commons-net:3.6' // 使用最新版本替代3.3 } ``` 然后,我们需要创建一个FTP客户端实例并配置连接参数,如服务器地址、端口号、用户名和密码。以下是一个简单的FTP连接示例: ...

    FTPCLIENT_commons-net-1.4.1_jakarta-oro-2.0.8

    2. **目录操作**:`FTPClient`提供了`changeWorkingDirectory`方法来切换当前工作目录,`listDirectories`和`listFiles`方法用于列出目录及其内容。 3. **文件上传**:`storeFile`方法用于上传文件到服务器,需要...

    commons-net-2.0.jar

    - 列出目录:使用listFiles()方法获取目录下的文件和子目录列表。 - 改变当前工作目录:使用changeWorkingDirectory()方法。 ```java FTPFile[] files = client.listFiles(); for (FTPFile file : files) { ...

    commons-net-3.0.1.jar

    7. **下载文件**:`FTPFile[] files = client.listFiles("remoteDirectory");` 获取远程目录下的文件,然后使用`retrieveFile()`方法下载。 8. **处理日志**:Apache Commons Net允许开发者控制日志级别,以便记录...

    commons-net-3.3

    4. **目录管理**:`FTPClient.changeWorkingDirectory()`可切换当前工作目录,`FTPClient.listDirectories()`和`FTPClient.listFiles()`分别用于获取目录列表和文件列表。 5. **日志输出**:Apache Commons Net支持...

    commons-net-3.6.zip

    4. **文件操作**:FTPClient提供了众多方法来处理文件,如listFiles()用于获取目录列表,retrieveFile()用于下载文件,storeFile()用于上传文件。 5. **文件传输模式**:FTP支持ASCII和二进制两种传输模式。使用...

    commons-net-3.0.1-bin.tar.gz pgp

    `commons-net-3.0.1-bin.tar.gz` 是一个包含Apache Commons Net库的压缩文件,主要用于Java开发中处理各种网络协议,特别是FTP(文件传输协议)操作。这个库是Apache软件基金会的一个开源项目,提供了丰富的类和方法...

    ftp所需jar包(commons-net-1.4.1.jar,jakarta-oro-2.0.8.jar)

    7. **目录操作**:使用`changeWorkingDirectory()`, `listNames()`, `listFiles()`等方法切换工作目录、获取目录列表。 8. **断开连接**:完成所有操作后,调用`disconnect()`断开与FTP服务器的连接。 在实际开发...

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

    3. **目录操作**:你可以使用`changeWorkingDirectory()`方法切换当前工作目录,`listDirectories()`和`listFiles()`方法获取目录和文件信息。 4. **设置传输模式**:`FTPClient`支持主动模式和被动模式,可以通过`...

    commons-ftp中ftpClient类的API

    Apache Commons Net库中的`FTPClient`类是Java中用于与FTP服务器进行通信的重要工具。它封装了所有必要的功能,使得用户能够方便地上传、下载、列出远程目录中的文件,以及执行其他FTP操作。这个类继承自`Socket...

    Apache Commons Net » 3.3 org.apache.commons.net.ftp.FTPClient

    4. **目录操作**:`changeWorkingDirectory(directory)`允许切换当前工作目录,`printWorkingDirectory()`返回当前目录,`listDirectories()`和`listFiles()`则分别用于获取目录和文件列表。 5. **文件和权限管理**...

    commons-net3的一些应用

    在实际应用中,开发者通常会利用该库提供的FTPClient类来建立FTP连接,执行各种FTP命令,如listFiles()用于获取远程目录文件列表,retrieveFile()用于下载文件,storeFile()用于上传文件。 标签“源码”暗示了文章...

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

    本文将详细讲解三种常用的FTP客户端库——Apache.FTPClient、ftp4j及jftp,并以Apache.FTPClient为例,深入探讨其使用方法。 #### 一、Apache.FTPClient简介 Apache Commons Net是Apache项目下的一个开源工具包,...

    FTPClient.

    FTPFile[] files = ftpClient.listFiles(); for (FTPFile file : files) { System.out.println(file.getName()); } ftpClient.makeDirectory("newDirectory"); boolean deleteSuccess = ftpClient.deleteFile(...

    Apache的FTPClient.jar

    6. 获取文件信息:`FTPClient.listFiles(String dir)`返回服务器上指定目录下的文件和目录列表。 7. 保持会话状态:`FTPClient.setFileType(FTP.BINARY_FILE_TYPE)`设置文件传输类型为二进制,适用于大多数文件。...

    最新版FTP上传需要的jar包和java FTPUtil例子

    "commons-net-3.6.jar"是Apache Commons Net库的一个版本,这个库为Java提供了丰富的网络协议支持,包括FTP。Apache Commons Net提供了FTPClient类,它是FTP协议的主要接口,可以用来执行各种FTP操作,如连接服务器...

    net-ftp-jar

    3. **目录操作**:可以使用listNames、listFiles等方法获取服务器上的目录列表,mkdirs用于创建目录,deleteFile或delete用于删除文件或目录。 4. **文件上传和下载**:使用storeFile方法将本地文件上传到服务器,...

Global site tag (gtag.js) - Google Analytics