чтение файла, нет вывода на консоль (intellij)

#scala

#scala

Вопрос:

Я новичок в Scala, следую руководству по чтению файлов. Предполагается, что код будет печатать построчно из текстового файла, не видя никаких выходных данных в консоли IntelliJ.

Я пробовал другие примеры кода и могу видеть вывод программы, но только этот файловый модуль ничего не показывает.

 import scala.io.Source._

object readfile extends App {

    println("hello")

    val filename = "src/rainbow.txt"
    for(line <- fromFile(filename).getLines()) {
        println(line)
    }

    println(filename)

}
  

введите описание изображения здесь

Ответ №1:

Похоже, вы работаете на листе Intellij (или блокноте, как его теперь называют). Если это так, то проблема в том, что ваш object extends App , который обертывает код вашего объекта в скрытый main() метод.

Есть три простых способа выполнить код и увидеть результат.

1 — Вызвать main() после определения readfile объекта.

 readfile.main(Array())
  

2 — Извлеките extends App и затем вызовите (ссылка) readfile после его определения.

3 — Полностью удалите object оболочку и позвольте Intellij запускать код напрямую.

 import scala.io.Source._

println("hello")

val filename = "src/rainbow.txt"
for(line <- fromFile(filename).getLines()) {
  println(line)
}
println(filename)
  

Комментарии:

1. Все 3 подхода работают как минимум с ошибками. Спасибо. Q1. является ли это скрытым основным, как public static void main in java? Q2. #1 и # 2 и # 3 выбрасывает java.io.FileNotFoundException из-за ошибки path, я попробовал оба rainbow.txt и src/rainbow.txt

2. A1. Да. A2. Текущий рабочий каталог для scratch pad IntelliJ — это каталог, из которого был запущен IntelliJ. (В моем случае это $HOME .) Вы также могли бы попробовать абсолютный путь к входному файлу.

3. Я понимаю. кое-что в сторону, если вы не возражаете ответить, я предполагаю, что object создается экземпляр из моего примера и class является чертежом в scala. итак, если это верно, то в контексте A1, public static void main это статический метод, который вызывается без создания объекта. В противном случае, пожалуйста, просветите меня.

4. В Scala нет static . То, что у него есть, — это object s, которые можно рассматривать как class с гарантированным экземпляром singleton. Как и Java, скомпилированному байт-коду нужна запись или начальная точка. В Scala это main() метод в object , и он вызывается, когда операционная система загружает и выполняет программу. Для получения более подробной информации проведите некоторое исследование / почитайте. Это немного выходит за рамки комментариев SO.