[FIXED] So listen Sie alle Dateien aus dem Ressourcenordner mit Scala auf

Ausgabe

Gehen Sie in Ihrem Ressourcenordner von folgender Struktur aus:

resources
├─spec_A
| ├─AA
| | ├─file-aev
| | ├─file-oxa
| | ├─…
| | └─file-stl
| ├─BB
| | ├─file-hio
| | ├─file-nht
| | ├─…
| | └─file-22an
| └─…
├─spec_B
| ├─AA
| | ├─file-aev
| | ├─file-oxa
| | ├─…
| | └─file-stl
| ├─BB
| | ├─file-hio
| | ├─file-nht
| | ├─…
| | └─file-22an
| └─…
└─…

Die Aufgabe besteht darin, alle Dateien für eine bestimmte Spezifikation spec_Xeinen Unterordner nach dem anderen zu lesen. Aus offensichtlichen Gründen möchten wir nicht die genauen Namen als Zeichenfolgenliterale haben, mit denen Source.fromResource("spec_A/AA/…")Hunderte von Dateien im Code geöffnet werden können.

Außerdem sollte diese Lösung natürlich innerhalb der Entwicklungsumgebung laufen, dh ohne in ein JAR gepackt zu werden.

Lösung

Dank der Antwort von @TrebledJ könnte dies auf Folgendes minimiert werden:

class ConfigFiles (val basePath String) {
  lazy val jarFileSystem: FileSystem = FileSystems.newFileSystem(getClass.getResource(basePath).toURI, Map[String, String]().asJava);

  def listPathsFromResource(folder: String): List[Path] = {
    Files.list(getPathForResource(folder))
      .filter(p ⇒ Files.isRegularFile(p, Array[LinkOption](): _*))
      .sorted.toList.asScala.toList // from Stream to java List to Scala Buffer to scala List
  }

  private def getPathForResource(filename: String) = {
    val url = classOf[ConfigFiles].getResource(basePath + "/" + filename)
    if ("file" == url.getProtocol) Paths.get(url.toURI)
    else jarFileSystem.getPath(basePath, filename)
  }
}

Besondere Aufmerksamkeit war für die leeren Einstellungskarten erforderlich.

Das Überprüfen des URL-Protokolls scheint unvermeidlich. Git aktualisiert, PUll-Anfragen willkommen: https://github.com/kurellajunior/list-files-from-resource-directory


Beantwortet von –
Jan


Antwort geprüft von –
Mary Flores (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like