Загрузка каталога из файла ресурсов и загрузка файлов в список - PullRequest
0 голосов
/ 12 октября 2019

Я не могу найти каталог при вызове getClass.getResource ()

путь src -> main -> resources -> RocheFiles

Я пробовал абсолютный путь. В настоящее время у меня есть 39 CSV-файлов в каталоге RocheFiles.

val testCaseDirectory = getClass.getResource("/RocheFiles")
    val directory = new File(testCaseDirectory.getPath)
    val testCases = if (directory.exists && directory.isDirectory) {
        directory
        .list
        .map(s => new File(directory.getAbsolutePath + "/" + s))
        .filter(s => s.exists && s.isDirectory)
        .sortBy(f => f.getName)
        .toList
    } else List.empty

    println(testCaseDirectory)
    println(directory)
    println(testCases)

Вот результаты печати:

jar:file:/var/folders/yr/tvnq7crd3mvdn0s3kyv_q4t00000gn/T/sbt_43463083/job-10/target/d5caefa1/rocheapp_2.12-0.1.0.jar!/RocheFiles
file:/var/folders/yr/tvnq7crd3mvdn0s3kyv_q4t00000gn/T/sbt_43463083/job-10/target/d5caefa1/rocheapp_2.12-0.1.0.jar!/RocheFiles
List()
List()

Я пытался

val testCaseDirectory = getClass.getResource("/RocheFiles")
    val directory = new File(testCaseDirectory.getPath)

    // for c,d,e,f
    val cdef = directory.listFiles.toList
               .filter(_.isDirectory)
               .flatMap(p => new File(p.getPath).listFiles)

    println(cdef)

все еще получаю исключение нулевого указателя

[error] Total time: 2 s, completed Oct 12, 2019, 12:55:09 AM
sbt:rocheApp> run
[error] (run-main-c) java.lang.NullPointerException
[error] java.lang.NullPointerException

Я могу получить по одному файлу за раз - используя это: Не знаю, как читать в каталоге и перебирать каждый CSV-файл.

override def readRoche(): List[List[String]] = {
    for {
      line <- Source.fromFile(fileName).getLines().toList
      values = line.split('|').toList
    } yield values}
}

Это выполнение CSVReader.

val rocheLines = new CSVReader("src/main/resources/RocheFiles/BP40331_UBSC_QRS3_PROD_OPEN_20190926121416.csv").readRoche()

ОБНОВЛЕНИЕ: я переместил каталог за пределы каталога ресурсов, и я могу читать в CSV-файле, используя приведенный ниже код

def getListOfFiles(dir: String):List[File] = {
        val d = new File(dir)
        if (d.exists && d.isDirectory) {
            d.listFiles.filter(_.isFile).toList
        } else {
            List[File]()
        }
}
val testCaseDirectory = getListOfFiles("src/main/scala/corp/marshconsult/bracketProjects/rocheApp/RocheFiles")

До сих пор не уверен, почему яЯ могу найти отдельные файлы в каталоге ресурсов, но не каталог внутри каталога ресурсов.

1 Ответ

0 голосов
/ 12 октября 2019

Вы можете использовать listFiles для отображения списка всех объектов и isFile или isDirectory для определения файла или папки.

Если структура dir выглядит следующим образом

- main
-- resources
--- RocheFiles
---- a.txt
---- b.txt
---- dir1
----- c.txt
----- d.txt
---- dir2
----- e.txt
----- f.txt

, получить эти файлы будет просто

  val testCaseDirectory = getClass.getResource("/RocheFiles")
  val directory = new File(testCaseDirectory.getPath)

  // for a,b files
  val ab = directory.listFiles.filter(_.isFile)

  // for c,d,e,f
  val cdef = directory.listFiles.toList
             .filter(_.isDirectory)
             .flatMap(p => new File(p.getPath).listFiles)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...