在Java中,你可以使用第三方库,如JSch,来实现通过SFTP协议获取指定目录下的文件列表。以下是一个简单的例子,演示如何使用JSch库获取SFTP服务器上指定目录的文件列表:
首先,确保你的项目中包含了JSch库。如果你使用Maven,可以添加以下依赖:
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
然后,你可以使用以下代码来获取指定目录下的文件列表:
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import java.util.Vector;
public class SFTPExample {
public static void main(String[] args) {
String host = "sftp.example.com";
int port = 22;
String user = "username";
String password = "password";
String remoteDir = "/path/to/directory";
JSch jsch = new JSch();
Session session = null;
Channel channel = null;
ChannelSftp sftpChannel = null;
try {
// Setup JSch session.
session = jsch.getSession(user, host, port);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(password);
session.connect();
// Open SFTP channel.
channel = session.openChannel("sftp");
channel.connect();
sftpChannel = (ChannelSftp) channel;
// Change to the target directory.
sftpChannel.cd(remoteDir);
// Get the file list for the current directory.
Vector<ChannelSftp.LsEntry> list = sftpChannel.ls("*");
for (ChannelSftp.LsEntry entry : list) {
System.out.println(entry.getFilename());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// Close the channel and the session.
if (sftpChannel != null) {
sftpChannel.exit();
}
if (channel != null) {
channel.disconnect();
}
if (session != null) {
session.disconnect();
}
}
}
}
确保替换host
, port
, user
, password
, 和remoteDir
变量值为你的SFTP服务器的实际信息。
上述代码中,我们首先建立了一个SFTP通道并连接,然后改变到指定的远程目录,并使用通配符*
获取该目录下的所有文件和目录列表。之后,我们遍历这个列表并打印出文件名。最后,在操作完成后,关闭了通道和会话,释放资源。