【发布时间】:2018-04-05 14:52:59
【问题描述】:
我已经使用 SFTP com.jcraft.jsch创建了一个成功的连接
我还在HostDir下创建了一个目录文件夹,比如:channelSftp.mkdir("sftp.test");
现在我想读取主机目录下的所有文件/文件夹名称,我没有看到任何合适的方法或示例。
谢谢
【问题讨论】:
我已经使用 SFTP com.jcraft.jsch创建了一个成功的连接
我还在HostDir下创建了一个目录文件夹,比如:channelSftp.mkdir("sftp.test");
现在我想读取主机目录下的所有文件/文件夹名称,我没有看到任何合适的方法或示例。
谢谢
【问题讨论】:
使用这个..完成它..
ChannelSftp sftp = (ChannelSftp) channel;
sftp.cd(hostDir);
Vector<String> files = sftp.ls("*");
for (int i = 0; i < files.size(); i++)
{
Object obj = files.elementAt(i);
if (obj instanceof com.jcraft.jsch.ChannelSftp.LsEntry)
{
LsEntry entry = (LsEntry) obj;
if (true && !entry.getAttrs().isDir())
{
ret.add(entry.getFilename());
}
if (true && entry.getAttrs().isDir())
{
if (!entry.getFilename().equals(".") && !entry.getFilename().equals(".."))
{
ret.add(entry.getFilename());
}
}
}
}
System.out.println(ret);
【讨论】:
虽然接受的答案有效,但代码过于复杂并且存在许多问题,主要问题是从String 转换为LsEntry。
这是一个更简单的解决方案,没有晦涩的演员表:
List<String> list = new ArrayList<>();
ChannelSftp sftp = (ChannelSftp) channel;
Vector<LsEntry> files = sftp.ls(path);
for (LsEntry entry : files)
{
if (!entry.getFilename().equals(".") && !entry.getFilename().equals(".."))
{
list.add(entry.getFilename());
}
}
System.out.println(list);
如果要递归列出文件(包括子目录中的文件),请参阅:
List complete hierarchy of a directories at SFTP server using JSch in Java
【讨论】: