0

我正在尝试使用 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

谢谢你的帮助!

4

0 回答 0