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编写文本,获得正确的编码?_Scala_File_Text_Encoding_Io - Fatal编程技术网

阅读及;用Scala编写文本,获得正确的编码?

阅读及;用Scala编写文本,获得正确的编码?,scala,file,text,encoding,io,Scala,File,Text,Encoding,Io,我正在用Scala读写一些文本文件。作为这门语言的完全初学者,我想确保找到正确的方法,例如正确编码 因此,我推荐的大部分内容都使用了io.Source.fromFile val user_list = Source.fromFile("usernames.txt").getLines.toList val user_list = Source.fromFile("usernames.txt", enc="UTF8").getLines.toList 我看了一下报告,但还剩下一些问题 正确使用编

我正在用Scala读写一些文本文件。作为这门语言的完全初学者,我想确保找到正确的方法,例如正确编码

因此,我推荐的大部分内容都使用了
io.Source.fromFile

val user_list = Source.fromFile("usernames.txt").getLines.toList
val user_list = Source.fromFile("usernames.txt", enc="UTF8").getLines.toList
我看了一下报告,但还剩下一些问题

正确使用编码方法

  • 文档显示,我可以像上面尝试的那样在
    Source.fromFile
    中设置编码。看着上面的人和上面列出的人,我想知道这些是否都是我的编解码器选项——是否有Utf-16、Big-Endian vs-Little-Endian等

  • 我有点痴迷于此,因为它过去常常让我在Python中陷入困境。出于某种原因,Scala不太关心这个问题吗

在中获得正确的读数:

  • 我看到的所有示例都使用了
    getLines
    方法,并使用
    MkString
    List
    等对其进行后处理。与一次性读取整个文件(我的文件很小)相比,这有什么好处吗
写出正确的

  • 我能找到的每一个源代码都告诉我Scala没有文件写入功能,只能使用Java
    FileWriter
    。我对此感到惊讶——这仍然准确吗
看着它,我觉得这个问题可能有点宽泛,所以如果它不符合要求,我很乐意收回它。在这一点上,我不是在为具体的例子而挣扎,而是试图以一种我以后不会遇到麻烦的方式来设置事情。
谢谢

Scala在标准库中只有一个基本的IO api。在大多数情况下,您只需要使用JavaAPI。一个来自java的体面api的存在可能就是Scala团队没有优先考虑拥有一个健壮且功能齐全的IO api的原因

不过,您也可以使用第三方scala库。我从未使用过但听说过Scala文件api的优点。以及提供功能强大的流式IO。我肯定还有其他人

对于编码,有许多可能的编码可用。只是,只有两个最常见的字段可以作为静态字段使用,其余字段通常通过
编解码器(“编码名称”)
访问。大多数API还允许您直接输入字符串,而无需首先获取编解码器实例。编解码器实际上只是
java.nio.charset.charset
的包装器。您可以运行
java.nio.charset.charset.availableCharsets()
查看系统上可用的所有编码


至于读取,如果文件很小,您可以将它们完全加载到内存中,如果您愿意的话。不这样做的唯一原因是,如果逐行读取就足够了,那么要避免一次性加载整个文件的额外内存使用。出于效率原因,您可能希望使用Vector而不是List(Vector在许多情况下更好,并且应该作为默认集合使用,但传统和旧习惯很难改变,大多数人/指南似乎默认使用List,但这是一个完全不同的主题)

您是否将Java属性
file.encoding设置为
UTF-8
?看见