FileNotFoundException с абсолютным путем

У меня есть такой каталог:

assigment
 |
 |__ src
 |   |
 |   |__ Main.scala
 |
 |
 |__ testcase
     |
     |__ Simple.in

В Main.scalaSimple.in читается Source.fromFile():

val inputFile = "Simple.in"
val lines = Source.fromFile("./testcase/" + inputFile).getLines

Но когда я запускаю Main.scala в sbt FileNoutFoundException появляются. Когда я изменяю путь к "../testcase/" + inputFile тогда работает нормально. Первоначальный путь принадлежит моему учителю, поэтому мне интересно, какой путь на самом деле правильный? О, я использую Linux, кстати...

2 ответа

Решение

./ означает: текущий путь

../ означает: каталог "выше" текущего каталога

Таким образом: когда вы запускаете ваш класс Scala из "src", "./testcase" заставляет его искать тестовый сценарий каталога в "src"; или используя полные пути:

"assignment / src /" + "./testcase" превращается в "assignment / src / testcase"

Тогда как, когда вы используете

"assignment/src/" + "../testcase" превращается в "assignment / testcase"

следовательно, версия с ".." находит правильный путь. Это все волшебство здесь!

. => текущий каталог

.. => один выше текущего dir

Но стандартным способом доступа к ресурсам является использование resources папка структуры проекта sbt.

Этот способ помогает вам получить доступ к файлам независимо от того, где (к какому классу) вы обращаетесь к ресурсу в коде.

Папка для размещения ваших файлов

src/main/resources

val stream : InputStream = getClass.getResourceAsStream("/readme.txt")
val lines = scala.io.Source.fromInputStream( stream ).getLines
Другие вопросы по тегам