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