Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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
BufferedReader readLine返回值在scala中不理解为字符串?_Scala_Bufferedreader - Fatal编程技术网

BufferedReader readLine返回值在scala中不理解为字符串?

BufferedReader readLine返回值在scala中不理解为字符串?,scala,bufferedreader,Scala,Bufferedreader,尽管我意识到有一些原生的scala方法可以完成以下工作,但是理解这种行为还是很有见地的 对于以下代码段,For循环迭代器不正确: val br = new BufferedReader(new FileReader("/tmp/test.txt")) val stdin = new FileOutputStream("/tmp/x.txt") for (line : String <- br.readLine) { // val mys = new String(line)

尽管我意识到有一些原生的scala方法可以完成以下工作,但是理解这种行为还是很有见地的

对于以下代码段,For循环迭代器不正确:

val br = new BufferedReader(new FileReader("/tmp/test.txt"))
val stdin = new FileOutputStream("/tmp/x.txt")
for (line : String <- br.readLine) {
  //    val mys = new String(line)
  stdin.write(line)
  stdin.write('\n')
}
val br=new BufferedReader(新文件读取器(“/tmp/test.txt”))
val stdin=new FileOutputStream(“/tmp/x.txt”)

对于(line:String
br.readLine
返回一个字符串,对字符串的
map
操作在
Char

{line

你可以这样写:

val br = new BufferedReader(new FileReader("/tmp/test.txt"))
val outfile = new FileOutputStream("/tmp/x.txt")

var line:String = ""

while ({ line = br.readLine() ; line != null } ) {

   outfile.write(line.getBytes)
   outfile.write('\n')
}

br.readLine
返回字符串,对字符串的
map
操作在
Char

{line

你可以这样写:

val br = new BufferedReader(new FileReader("/tmp/test.txt"))
val outfile = new FileOutputStream("/tmp/x.txt")

var line:String = ""

while ({ line = br.readLine() ; line != null } ) {

   outfile.write(line.getBytes)
   outfile.write('\n')
}

在进一步弄乱这两个问题之后,我们发现了

A) “行”必须是单独声明中的“var”,如下所示:

var line:String = ""
for (line <- br.readLine) {
C) 整个代码段现在是:

import java.io._
val br = new BufferedReader(new FileReader("/tmp/test.txt"))
val stdin = new FileOutputStream("/tmp/x.txt")
var line:String = ""
  while ({line = in.readLine();  line!= null}) {
    println(line)
    if (line!=null) {
        stdin.write(line.getBytes)
        stdin.write('\n')
    } else {}
}
br.close
stdin.flush
stdin.close
然而,即使是这种解决方案最终也会导致:

java.io.IOException: Stream closed
    at java.io.BufferedReader.ensureOpen(BufferedReader.java:97)
    at java.io.BufferedReader.readLine(BufferedReader.java:292)
    at java.io.BufferedReader.readLine(BufferedReader.java:362)
    at .<init>(<console>:46)
    at .<clinit>(<console>)
    at .<init>(<console>:7)
    at .<clinit>(<console>)
    at $print(<console>)
java.io.IOException:流已关闭
在java.io.BufferedReader.com上重新打开(BufferedReader.java:97)
位于java.io.BufferedReader.readLine(BufferedReader.java:292)
位于java.io.BufferedReader.readLine(BufferedReader.java:362)
在。(:46)
在
在。(:7)
在
$print()

请注意,for循环中的“println”从未执行。

在进一步处理这两个问题后,发现了这两个问题

A) “行”必须是单独声明中的“var”,如下所示:

var line:String = ""
for (line <- br.readLine) {
C) 整个代码段现在是:

import java.io._
val br = new BufferedReader(new FileReader("/tmp/test.txt"))
val stdin = new FileOutputStream("/tmp/x.txt")
var line:String = ""
  while ({line = in.readLine();  line!= null}) {
    println(line)
    if (line!=null) {
        stdin.write(line.getBytes)
        stdin.write('\n')
    } else {}
}
br.close
stdin.flush
stdin.close
然而,即使是这种解决方案最终也会导致:

java.io.IOException: Stream closed
    at java.io.BufferedReader.ensureOpen(BufferedReader.java:97)
    at java.io.BufferedReader.readLine(BufferedReader.java:292)
    at java.io.BufferedReader.readLine(BufferedReader.java:362)
    at .<init>(<console>:46)
    at .<clinit>(<console>)
    at .<init>(<console>:7)
    at .<clinit>(<console>)
    at $print(<console>)
java.io.IOException:流已关闭
在java.io.BufferedReader.com上重新打开(BufferedReader.java:97)
位于java.io.BufferedReader.readLine(BufferedReader.java:292)
位于java.io.BufferedReader.readLine(BufferedReader.java:362)
在。(:46)
在
在。(:7)
在
$print()

请注意,for循环中的“println”从未执行。

我意识到了您独立编写的内容……并测试了我的替代解决方案。但是,我正在处理的“流已关闭”仍然存在一个问题。好的,我已“回答”问题:所以请看那里。但是如果你能发现关闭流的问题,我会给你“正确答案”。我意识到你写的是独立的..并测试我的替代解决方案。但是我仍在处理“流已经关闭”的问题。好的,我已经“回答”问题:所以请看那里。但是如果你能在封闭流中发现问题,我会给你“正确答案”。有了这个解决方案,我会在任何情况下给你答案。谢谢。另外
如果(line!=null)
检查内部,而body是多余的。啊,我明白了。这是两个操作中的第二个,第一个操作(赋值)不涉及while循环的布尔表达式检查。是的,因为
line=br。readLine
是一个赋值,它返回
Unit
,而不是像Java中那样返回
String
。有了这个修正,它就可以工作了。在任何情况下,我都会奖励你的答案。谢谢。如果(line!=null),也可以使用
if(line!=null)
检查内部,而主体是冗余的。啊,我明白了。这是两个操作中的第二个,第一个(赋值)不涉及while循环的布尔表达式检查。是的,因为
line=br。readLine
是一个赋值,它返回
单位
,而不是Java中的
字符串