Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在scala中通过sftp读取文件_Scala_File_Sftp - Fatal编程技术网

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

如何在scala中通过sftp读取文件,scala,file,sftp,Scala,File,Sftp,我正在寻找一种在scala中通过sftp协议读取文件(可能还有目录)的简单方法 我的尝试: 我看过阿帕卡图书馆,它是阿卡的一部分。 但这适用于streams,这是一个我不熟悉的复杂主题,似乎为此付出了很多努力 还有spark sftp:这需要scala spark,仅仅加载一个文件就有点太多了 有一个jsch java库可以完成这项工作,但我无法让它发挥作用 我正在寻找使用库和sftp而不是我被迫使用的普通scp的实际工作代码。我发现网络上没有太多这样的例子,我发现的例子要复杂得多。下

我正在寻找一种在scala中通过sftp协议读取文件(可能还有目录)的简单方法

我的尝试:

  • 我看过阿帕卡图书馆,它是阿卡的一部分。 但这适用于streams,这是一个我不熟悉的复杂主题,似乎为此付出了很多努力

  • 还有spark sftp:这需要scala spark,仅仅加载一个文件就有点太多了

  • 有一个jsch java库可以完成这项工作,但我无法让它发挥作用


我正在寻找使用库和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()
}
我使用build.sbt中的以下条目在scala 2.13.4版上测试了这一点:

libraryDependencies += "com.hierynomus" % "sshj" % "0.31.0"
libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.2.3"
我不建议以这种方式实际使用它。这些步骤中的一些应该包装在一个Try中,然后如果文件不存在或者连接失败等等,那么应该进行一些错误检查。为了清楚起见,我故意省略了这一点

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

下面是一个使用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()
}
我使用build.sbt中的以下条目在scala 2.13.4版上测试了这一点:

libraryDependencies += "com.hierynomus" % "sshj" % "0.31.0"
libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.2.3"
我不建议以这种方式实际使用它。这些步骤中的一些应该包装在一个Try中,然后如果文件不存在或者连接失败等等,那么应该进行一些错误检查。为了清楚起见,我故意省略了这一点

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

如果您甚至不知道如何将库添加到项目中,那么您将无法执行任何操作。你的问题太宽泛了向sbt项目添加库非常简单,您只需添加一行,就可以通过谷歌搜索该行。然后,您需要查看库的文档以了解如何使用和编写代码。最后,根据您希望如何运行此程序以及在何处运行,您可能需要搜索如何创建包含所有库的胖罐子。@Luis Miguel Mejia Suares:谢谢您的请求。我非常了解如何将库添加到build.sbt。事实上,这很简单。我只是不知道如何使用java库来实现这一点,但我可以用谷歌搜索它。我的问题更多的是一种简单的方法(在scala中通过sftp打开文件),而不需要太多的开销。我只是补充了我已经试图澄清的内容(并表明我的要求并非出于懒惰)。我看不出“如何在scala中通过sftp读取文件”这个问题本身有多广泛。我怎么能问得更具体一些呢?您添加Java库的方式与添加Scala库的方式相同,因为在一天结束时,所有JAR都是发布到的。Scala库的唯一区别在于,它们将Scala主要版本作为后缀添加到名称中(例如,
org.typelevel.cats_2.13
),这就是为什么在sbt中我们使用
%%
而不是
%%
来添加Scala库,这两个百分比告诉sbt用Scala版本插入名称,对于Java库,您只需要一个百分比。这个问题很广泛,因为正如前面所述,这与询问“如何在Scala中构建web服务器”是一样的,而且库的建议在SO中也是离题的。在Reddit中你可能会很幸运,但同样,这类问题很难回答,因为不清楚你是想要建议还是想要完整的代码。我编辑了这个问题以使其更具体并加以澄清。如果你甚至不知道如何将库添加到项目中,那么你将无法做任何事情。你的问题太宽泛了向sbt项目添加库非常简单,您只需添加一行,就可以通过谷歌搜索该行。然后,您需要查看库的文档以了解如何使用和编写代码。最后,根据您希望如何运行此程序以及在何处运行,您可能需要搜索如何创建包含所有库的胖罐子。@Luis Miguel Mejia Suares:谢谢您的请求。我非常了解如何将库添加到build.sbt。事实上,这很简单。我只是不知道如何使用java库来实现这一点,但我可以用谷歌搜索它。我的问题更多的是一种简单的方法(在scala中通过sftp打开文件),而不需要太多的开销。我只是补充了我已经试图澄清的内容(并表明我的要求并非出于懒惰)。我看不出“如何在scala中通过sftp读取文件”这个问题本身有多广泛。我怎么能问得更具体一些呢?您添加Java库的方式与添加Scala库的方式相同,因为在一天结束时,所有JAR都是发布到的。Scala库的唯一区别在于,它们将Scala主要版本作为后缀添加到名称中(例如,
org.typelevel.cats_2.13
),这就是为什么在sbt中我们使用
%%
而不是
%%
来添加Scala库,这两个百分比告诉sbt用Scala版本插入名称,对于Java库,您只需要一个百分比。这个问题很广泛,因为正如前面所述,这与询问“如何在Scala中构建web服务器”是一样的,而且库的建议在SO中也是离题的。在Reddit中你可能会很幸运,但同样,这类问题很难回答,因为不清楚你是只想要建议还是想要完整的代码。我编辑了这个问题,以使其更具体,并澄清它。