Ich habe eine Ordnerstruktur wie folgt:
- main
-- java
-- resources
-- scalaresources
--- commandFiles
und in diesen Ordnern habe ich meine Dateien, die ich lesen muss. Hier ist der Code:
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
quelle
quelle
Antworten:
Ressourcen in Scala funktionieren genauso wie in Java. Befolgen Sie am besten die Best Practices von Java und setzen Sie alle Ressourcen in
src/main/resources
und einsrc/test/resources
.Beispiel Ordnerstruktur:
Scala 2.12.x && 2.13.x Lesen einer Ressource
Zum Lesen von Ressourcen stellt das Objekt Source die Methode fromResource bereit .
Lesen von Ressourcen vor 2.12 (immer noch mein Favorit aufgrund der JAR-Kompatibilität)
Zum Lesen von Ressourcen können Sie getClass.getResource und getClass.getResourceAsStream verwenden .
schönere Fehlerrückmeldung (2.12.x && 2.13.x)
Beachten Sie Folgendes, um nicht debuggbare Java-NPEs zu vermeiden:
gut zu wissen
Beachten Sie, dass getResourceAsStream auch gut funktioniert , wenn die Ressourcen Teil eines sind Glas , getResource , die eine URL zurück , die oft eine Datei erstellen verwendet wird , kann es zu Problemen führen.
in Produktion
Im Produktionscode schlage ich vor, sicherzustellen, dass die Quelle wieder geschlossen wird.
quelle
close
die QuelleVerwenden Sie für Scala> = 2.12
Source.fromResource
:quelle
Source.fromResource
Sie bei Ihnen nicht den anfänglichen Schrägstrich, den Sie habengetResourceAsStream
.Onliner-Lösung für Scala> = 2.12
quelle
EDIT: Gutschrift an den ursprünglichen Autor. Den vollständigen Blog finden Sie hier
quelle
Für Scala 2.11 , wenn getLines nicht genau das tun , was Sie wollen Sie auch die eine Datei aus dem Glas in dem lokalen Dateisystem kopieren.
Hier ist ein Snippit, der einen binären API-Schlüssel im Google .p12-Format aus / resources liest, in / tmp schreibt und dann die Dateipfadzeichenfolge als Eingabe für einen Schreibvorgang für Spark-Google-Tabellen verwendet .
In der Welt des sbt-native-Packagers und der sbt-Assembly ist das Kopieren nach local auch bei skalierten Binärdateitests nützlich. Pop sie einfach aus den Ressourcen zu lokal, führen Sie die Tests aus und löschen Sie dann.
quelle
Auf die erforderliche Datei kann wie folgt aus dem Ressourcenordner in Scala zugegriffen werden
quelle