Tengo una estructura de carpetas como la siguiente:
- main
-- java
-- resources
-- scalaresources
--- commandFiles
y en esas carpetas tengo mis archivos que tengo que leer. Aquí está el código:
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
Pradip Karad
fuente
fuente
Respuestas:
Los recursos en Scala funcionan exactamente como lo hacen en Java. Es mejor seguir las mejores prácticas de Java y poner todos los recursos en
src/main/resources
ysrc/test/resources
.Estructura de carpetas de ejemplo:
Scala 2.12.x && 2.13.x leyendo un recurso
Para leer recursos, el objeto Source proporciona el método fromResource .
leer recursos antes de la 2.12 (sigue siendo mi favorito debido a la compatibilidad con jar)
Para leer recursos, puede usar getClass.getResource y getClass.getResourceAsStream .
comentarios de error más agradables (2.12.xy& 2.13.x)
Para evitar NPE de Java no insegurables, considere:
bueno saber
Tenga en cuenta que getResourceAsStream también funciona bien cuando los recursos son parte de un jar , getResource , que devuelve una URL que se usa a menudo para crear un archivo y puede generar problemas allí.
en producción
En el código de producción, sugiero asegurarse de que la fuente esté cerrada nuevamente.
fuente
close
la FuentePara Scala> = 2.12, use
Source.fromResource
:fuente
Source.fromResource
usted no ponga la barra inclinada inicial que tienegetResourceAsStream
.Solución en línea para Scala> = 2.12
fuente
EDITAR: Crédito al autor original. Consulte el blog completo aquí
fuente
Para Scala 2.11 , si getLines no hace exactamente lo que usted desea, también puede copiar el archivo de la jarra con el sistema de archivos local.
Aquí hay un fragmento que lee una clave de API de formato binario google .p12 de / resources, la escribe en / tmp y luego usa la cadena de ruta del archivo como entrada para una escritura de spark-google-spreadsheets .
En el mundo de sbt-native- packager y sbt-assembly , copiar a local también es útil con las pruebas de archivos binarios más escalables. Simplemente sáquelos de los recursos a local, ejecute las pruebas y luego elimínelos.
fuente
Se puede acceder al archivo requerido como se muestra a continuación desde la carpeta de recursos en scala
fuente