Files.write在Scala REPL(2.10.5)中以字符串列表作为参数失败

Files.write在Scala REPL(2.10.5)中以字符串列表作为参数失败,scala,read-eval-print-loop,Scala,Read Eval Print Loop,使用scala REPL中的java.nio编写一些示例代码,以创建输出并将其写入文件。在适当的导入之后: > import java.nio.file.Files > import java.nio.charset.Charset > import java.nio.charset.StandardCharsets > import java.nio.file.Paths 我可以成功执行: > val utf8:Charset = StandardCharset

使用scala REPL中的java.nio编写一些示例代码,以创建输出并将其写入文件。在适当的导入之后:

> import java.nio.file.Files
> import java.nio.charset.Charset
> import java.nio.charset.StandardCharsets
> import java.nio.file.Paths
我可以成功执行:

> val utf8:Charset = StandardCharsets.UTF_8
> Files.write(Paths.get("foo.txt"), "foo".getBytes(utf8))
…并创建一个包含“foo”的简单文件。但是,更符合我的想法(迭代列表并将每个元素写成一行):

失败,出现以下异常:

<console>:17: error: overloaded method value write with alternatives:
  (x$1: java.nio.file.Path,x$2: Iterable[_ <: CharSequence],x$3: java.nio.charset.Charset,x$4: <repeated...>[java.nio.file.OpenOption])java.nio.file.Path <and>
  (x$1: java.nio.file.Path,x$2: Array[Byte],x$3: <repeated...>[java.nio.file.OpenOption])java.nio.file.Path
 cannot be applied to (java.nio.file.Path, List[String], java.nio.charset.Charset)
          Files.write(Paths.get("bar.txt"), lines, utf8)
:17:错误:重载方法值并使用替代项写入:

(x$1:java.nio.file.Path,x$2:Iterable[\up>因此这里的问题是Scala本身无法引入OpenOption接口。这里的库那么您的方法调用将是这样的

Files.write(Paths.get("bar.txt"), lines.getBytes(), utf8, StandardOpenOption.WRITE)

试图匹配的
Files.write
的签名需要
java.lang.Iterable
作为参数,而Scala列表不实现此接口。因此,您有两个选项:

通过平面映射原始列表,使用接受字节数组作为参数的签名:

Files.write(Paths.get("bar.txt"), lines.flatMap(s => (s + Properties.lineSeparator).getBytes(utf8)).toArray)
或者将Scala列表转换为Java列表:

import scala.collection.JavaConverters._

...

Files.write(Paths.get("bar.txt"), lines.asJava, utf8)

我猜它需要一个
java.util.List
。尝试导入
scala.collection.JavaConverters.
文件。write(path.get(“bar.txt”)、lines.asJava、utf8);
(在2.11.5上)@AlexisC.-这是有效的。作为答案提交,我可以接受。谢谢你。上述@AlexisC.works评论中的解决方案不需要引入YAL(另一个库)。谢谢你的选择,但我会选择小而简单的。哦,很好,这很酷。减少了库。我使用第二个选项解决了我的问题,使用asJava转换Scala列表。谢谢。
import scala.collection.JavaConverters._

...

Files.write(Paths.get("bar.txt"), lines.asJava, utf8)