不同的输出取决于intellij或sbt的编译

问题描述 投票:1回答:1

我有以下scala程序,只计算文件中的单词:

package com.impatient

import java.util.Scanner

object Main extends App {
  countWords()

  def countWords(): Unit = {

    val in = new Scanner(new java.io.File("C:\\tmp\\SampleText.txt"))
    var wc = 0

    while (in.hasNext()) {
      var word = in.next()
      wc += 1
      println( wc + ". " + word)
    }
    in.close()
    println("======================")
    println(s"Total words: $wc")
  }

  def TestFunction(): Unit ={
    println("Hello from test function!")
  }

  TestFunction()
}

当我在intellij中直接或通过intellij中的sbt shell执行此操作时,我得到以下输出:

  1. 大多
  2. 正:

======================

总字数:309 你好测试功能!

所以它正确计算文本文件中的309个单词。

但是,如果我尝试执行我刚刚用intellij编译的jar,直接通过scalasbt我得到以下输出:

λscala。\ impatientscala2_2.12-1.0.jar

======================

总字数:0 你好测试功能!

所以在这种情况下,尽管执行了Main中的方法,但wordcount为0。

为什么会这样呢? intellij引用其他一些独立的sbt或scala不是的java库吗?在那种情况下,为什么Scanner不会失败?

编辑1

我已将此回购克隆到另一台PC,看看会发生什么。在那种情况下,我可以观察到完全相反的,即:

  1. 从Intellij运行时,程序返回0字数
  2. 当使用scala直接运行jar时,它会提供当前的wordcount。

0 wordcount是由于没有处理while循环,因为in.hasNext()不返回任何内容。

scala intellij-idea sbt
1个回答
0
投票

我通过使用Paths.getjava.nio.file._找到了解决方法。

//val in = new Scanner(new java.io.File("C:/tmp/SampleText.txt"))
val in: Scanner = new Scanner(Paths.get("C/tmp/SampleText.txt"))

当使用Run |时,这会在两台PC上生成正确的jar Intellij中的Sbt Task,在intellij中使用SBT Shell,并使用独立的SBT shell。如果有人能够解释为什么java.io.File在某些设置中失败会很好。

© www.soinside.com 2019 - 2024. All rights reserved.