[英]List complete hierarchy of a directories at SFTP server using JSch in Java
我想使用JSch在遠程位置顯示目錄的完整層次結構。 該位置有多個文件夾,文件夾可能有也可能沒有文件。
我編寫的代碼(參考SFTP讀取目錄中的所有文件 ):
sftpChannel.cd(remotePath);
Vector<String> files = sftpChannel.ls("*");
List<String> ret=new ArrayList<>();
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()+"file");
}
if (true && entry.getAttrs().isDir())
{
if (!entry.getFilename().equals(".") && !entry.getFilename().equals(".."))
{
ret.add(entry.getFilename()+"folder");
}
}
}
}
System.out.println(ret);
此代碼僅顯示頂級文件夾名稱,不讀取這些文件夾中的文件。
我使用的是jsch-0.1.54。
謝謝
只需實現一個迭代到子目錄的遞歸函數,例如:
public static void listDirectory(
ChannelSftp channelSftp, String path, List<String> list) throws SftpException
{
Vector<LsEntry> files = channelSftp.ls(path);
for (LsEntry entry : files)
{
if (!entry.getAttrs().isDir())
{
list.add(path + "/" + entry.getFilename());
}
else
{
if (!entry.getFilename().equals(".") && !entry.getFilename().equals(".."))
{
listDirectory(channelSftp, path + "/" + entry.getFilename(), list);
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.