gpt4 book ai didi

java - 从资源文件加载目录并将文件加载到列表中

转载 作者:行者123 更新时间:2023-12-01 23:16:35 24 4
gpt4 key购买 nike

调用 getClass.getResource() 时无法找到目录

路径是 src -> main -> resources -> RocheFiles

我尝试过绝对路径。目前,我的 RocheFiles 目录中有 39 个 csv 文件。

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)

这是 println 结果:

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

我可以一次直接提取 1 个文件 - 使用以下方法:不确定如何读取目录并迭代每个 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")

仍然不确定为什么我能够找到资源目录中的单个文件,但不能找到资源目录内的目录。

最佳答案

您可以使用listFiles列出所有对象,并使用isFileisDirectory来确定文件或文件夹。

如果目录结构如下所示

- 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)

关于java - 从资源文件加载目录并将文件加载到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58349941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com