Saya memiliki struktur folder seperti di bawah ini:
- main
-- java
-- resources
-- scalaresources
--- commandFiles
dan di folder itu saya memiliki file yang harus saya baca. Ini kodenya:
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
sumber
sumber
Jawaban:
Sumber daya di Scala berfungsi persis seperti di Java. Yang terbaik adalah mengikuti praktik terbaik Java dan memasukkan semua sumber daya ke dalam
src/main/resources
dansrc/test/resources
.Contoh struktur folder:
Scala 2.12.x && 2.13.x membaca sumber daya
Untuk membaca sumber daya, Sumber objek menyediakan metode fromResource .
membaca sumber daya sebelum 2.12 (masih favorit saya karena kompatibilitas jar)
Untuk membaca sumber daya, Anda dapat menggunakan getClass.getResource dan getClass.getResourceAsStream .
umpan balik kesalahan yang lebih baik (2.12.x && 2.13.x)
Untuk menghindari Java NPE yang tidak dapat dibundel, pertimbangkan:
senang mendengarnya
Perlu diingat bahwa getResourceAsStream juga berfungsi dengan baik jika resource merupakan bagian dari jar , getResource , yang menampilkan URL yang sering digunakan untuk membuat file dapat menyebabkan masalah di sana.
dalam produksi
Dalam kode produksi, saya sarankan untuk memastikan bahwa sumber ditutup lagi.
sumber
close
SumberUntuk Scala> = 2.12, gunakan
Source.fromResource
:sumber
Source.fromResource
Anda jangan memasukkan garis miring awal yang Anda milikigetResourceAsStream
.Solusi onliner untuk Scala> = 2.12
sumber
EDIT: Penghargaan untuk penulis asli. Lihat blog lengkapnya di sini
sumber
Untuk Scala 2.11 , jika getLines tidak melakukan apa yang Anda inginkan, Anda juga dapat menyalin file dari jar ke sistem file lokal.
Berikut cuplikan yang membaca kunci API format google .p12 biner dari / resources, menuliskannya ke / tmp, lalu menggunakan string jalur file sebagai masukan untuk penulisan spark-google-spreadsheets .
Dalam dunia sbt-native-packager dan sbt-assembly , menyalin ke lokal juga berguna dengan tes file biner scalatest. Cukup keluarkan mereka dari sumber daya ke lokal, jalankan tes, lalu hapus.
sumber
File yang dibutuhkan dapat diakses seperti di bawah ini dari folder sumber daya dalam skala
sumber