У меня есть структура папок, как показано ниже:
- main
-- java
-- resources
-- scalaresources
--- commandFiles
и в этих папках у меня есть файлы, которые я должен прочитать. Вот код:
def readData(runtype: String, snmphost: String, comstring: String, specificType: String): Unit = {
val realOrInvFile = "/commandFiles/snmpcmds." +runtype.trim // these files are under commandFiles folder, which I have to read.
try {
if (specificType.equalsIgnoreCase("Cisco")) {
val specificDeviceFile: String = "/commandFiles/snmpcmds."+runtype.trim+ ".cisco"
val realOrInvCmdsList = scala.io.Source.fromFile(realOrInvFile).getLines().toList.filterNot(line => line.startsWith("#")).map{
//some code
}
val specificCmdsList = scala.io.Source.fromFile(specificDeviceFile).getLines().toList.filterNot(line => line.startsWith("#")).map{
//some code
}
}
} catch {
case e: Exception => e.printStackTrace
}
}
}
scala
scala-collections
Прадип Карад
источник
источник
Ответы:
Ресурсы в Scala работают точно так же, как и в Java. Лучше всего следовать лучшим практикам Java и размещать все ресурсы в файлах
src/main/resources
иsrc/test/resources
.Пример структуры папок:
Scala 2.12.x && 2.13.x чтение ресурса
Для чтения ресурсов объект Source предоставляет метод fromResource .
ресурсы для чтения до 2.12 (все еще мой любимый из-за совместимости с jar)
Для чтения ресурсов вы можете использовать getClass.getResource и getClass.getResourceAsStream .
более приятная обратная связь об ошибках (2.12.x && 2.13.x)
Чтобы избежать неполадок Java NPE, примите во внимание:
хорошо знать
Имейте в виду, что getResourceAsStream также отлично работает, когда ресурсы являются частью jar- файла , getResource , который возвращает URL-адрес, который часто используется для создания файла, может привести к проблемам там.
в производстве
В производственном коде я предлагаю убедиться, что исходный код снова закрыт.
источник
close
источникуДля Scala> = 2.12 используйте
Source.fromResource
:источник
Source.fromResource
вами не ставьте начальную косую черту, которая у вас естьgetResourceAsStream
.Онлайн-решение для Scala> = 2.12
источник
РЕДАКТИРОВАТЬ: Кредит оригинальному автору. См. Полный блог здесь
источник
Для Scala 2.11 , если getLines не делает именно то, что вы хотите, вы также можете скопировать файл из jar в локальную файловую систему.
Вот Snippit , который считывает двоичную Google P12 - формат ключ API из / ресурсов, пишет он в / TMP, а затем использует строку пути файла в качестве входных данных для свеч Google-таблиц записи .
В мире sbt-native- packager и sbt-assembly копирование на локальное также полезно с тестами масштабных двоичных файлов. Просто вытолкните их из ресурсов на локальные, запустите тесты, а затем удалите.
источник
Доступ к требуемому файлу можно получить, как показано ниже, из папки ресурсов в scala.
источник