检查 FTP 服务器上的文件是否存在
2022-09-02 03:02:21
有没有一种有效的方法来检查FTP服务器上是否存在文件?我正在使用Apache Commons Net。我知道我可以使用的方法获取特定目录中的所有文件,然后我可以查看此列表以检查给定文件是否存在,但我认为它效率不高,特别是当服务器包含大量文件时。listNames
FTPClient
有没有一种有效的方法来检查FTP服务器上是否存在文件?我正在使用Apache Commons Net。我知道我可以使用的方法获取特定目录中的所有文件,然后我可以查看此列表以检查给定文件是否存在,但我认为它效率不高,特别是当服务器包含大量文件时。listNames
FTPClient
listFiles(String pathName)
对于单个文件应该可以正常工作。
使用 listFiles
(或 mlistDir
)调用中文件的完整路径,如接受的答案所示,确实应该有效:
String remotePath = "/remote/path/file.txt";
FTPFile[] remoteFiles = ftpClient.listFiles(remotePath);
if (remoteFiles.length > 0)
{
System.out.println("File " + remoteFiles[0].getName() + " exists");
}
else
{
System.out.println("File " + remotePath + " does not exists");
}
RFC 959 在 4.1.3 节中关于命令的部分说:LIST
如果路径名指定文件,则服务器应发送有关该文件的最新信息。
尽管如果您要检查许多文件,这将相当无效。该命令的使用实际上涉及多个命令,等待它们的响应,并且主要是打开数据连接。打开新的TCP / IP连接是一项代价高昂的操作,当使用加密时更是如此(如今这是必须的)。LIST
此外,命令对于测试文件夹的存在更无效,因为它会导致完整文件夹内容的传输。LIST
更有效的方法是使用mlistFile
(命令),如果服务器支持它:MLST
String remotePath = "/remote/path/file.txt";
FTPFile remoteFile = ftpClient.mlistFile(remotePath);
if (remoteFile != null)
{
System.out.println("File " + remoteFile.getName() + " exists");
}
else
{
System.out.println("File " + remotePath + " does not exists");
}
此方法可用于测试目录是否存在。
MLST
命令不使用单独的连接(与 相反)。LIST
如果服务器不支持命令,则可以滥用 getModificationTime
( 命令):MLST
MDTM
String timestamp = ftpClient.getModificationTime(remotePath);
if (timestamp != null)
{
System.out.println("File " + remotePath + " exists");
}
else
{
System.out.println("File " + remotePath + " does not exists");
}
此方法不能用于测试目录是否存在。