如何在scala中通过sftp读取文件



我正在寻找一种简单的方法来读取文件(也许是一个目录)通过sftp协议在scala。

我的尝试:

  • 我看过Alpakka库,它是akka的一部分。但这适用于流,这是一个复杂的主题,我不熟悉,似乎要付出很多努力。

  • 然后是spark-sftp:这需要scala spark,这可能只是加载一个文件有点多。

  • 有java的jsch库可以做这项工作,但我不能让它工作

我正在寻找使用库和sftp而不是普通的scp的实际工作代码,我被迫这样做。我发现网上没有很多这样的例子,而且我找到的例子要复杂得多。

下面是一个使用sshj:

的工作示例
import net.schmizz.sshj.SSHClient
import net.schmizz.sshj.sftp.SFTPClient
object Main extends App {
val hostname = "myServerName"
val username = "myUserName"
val password = "thePassword"
val destinationFile = "C:/Temp/Test.txt"
val sourceFile = "./Test.txt"
val ssh = new SSHClient()
ssh.addHostKeyVerifier("xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx")
ssh.connect(hostname)
ssh.authPassword(username, password)
val sftp: SFTPClient = ssh.newSFTPClient()
sftp.get(sourceFile, destinationFile)
sftp.close()
ssh.disconnect()
}

我在scala 2.13.4版本上使用build.sbt中的以下条目进行了测试:

libraryDependencies += "com.hierynomus" % "sshj" % "0.31.0"
libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.2.3"

我不建议这样使用它。其中一些步骤应该包装在Try中,然后如果文件不存在或连接失败等,应该进行一些错误检查。为了清楚起见,我故意把它省略了。

我并不是说这是这个任务的唯一或正确的库。这是第一个对我有用的。特别是addHostKeyVerifier方法在我的案例中非常有帮助。还有其他库,如JSCH、jash、scala-ssh和scala-ftp也可以很好地完成这项工作。

最新更新