我正在尝试使用 JSch 从 Windows SFTP 服务器上的文件夹位置获取文件列表。我看到的一种行为是:
在一定数量的字符之后,文件甚至没有被列出,也没有抛出异常。
例如:
未列出的文件: C:/Data/Thai-Han-Test1/All_testcases_special_characters/Special_characters/Multilinguage_Characters_list/Han/当世界需要时,请使用!将于年月10日-12日在德国市的第第十届统一码国际研讨会现在开始注册。本次 - Copy2.txt
列出的文件: C:/Data/Thai-Han-Test1/All_testcases_special_characters/Special_characters/Multilinguage_Characters_list/Han/世界当需要交流的时候,请用!今年10月10日-12日在德国市举办的第十一届统一码国际研讨会现在开始注册。本 - Copy3.txt
为了获得可以列出的文件路径的最大长度,我从第一个字符串中删除了一个额外的字符 次 并且它起作用了。
我也尝试了一个更大的带有英文字符的字符串,它也被列出了。
我的问题是 - 从 JSch 的角度来看,字符长度是否有任何限制,因为我可以通过在服务器本身上执行 dir 来列出这两个文件。
下面的代码片段供参考,对于给定的文件夹路径列表,文件被添加到列表中。
var srcFilePathsBuffer = new ListBuffer[String]()
var srcFilePathsList = List[String]()
var folderFilesList = List[Any]()
for (sftpFolderPath <- sftpFolderPathsList) {
c.cd(sftpFolderPath)
folderFilesList = c.ls(sftpFolderPath).asScala.toList
LOG.debug("folderFilesList: " + folderFilesList)
if (folderFilesList.size > 0)
for (i <- 0 to folderFilesList.size - 1) {
val entry = folderFilesList(i).asInstanceOf[ChannelSftp#LsEntry]
LOG.debug("Entry: " + entry)
var entryName = entry.getFilename
if (!entry.getAttrs.isDir() && !entry.getFilename.equals(".") && !entry.getFilename.equals("..")) {
LOG.debug(entryName + " is file")
srcFilePathsBuffer += sftpFolderPath + "/" + entryName
}
}
}
srcFilePathsList = srcFilePathsBuffer.toList
srcFilePathsList
谢谢你的帮助!