(Java、Scala)读取IDEA maven项目resource下相对路径文件
程序员文章站
2022-05-10 11:49:47
...
在使用maven创建的项目中,在编译时会在项目下生成target文件夹,其下面的class文件夹里面生成src->main中的数据如resources中的文件或者是scala文件夹下面的.scala文件的“倒影”。
所以寻找文件的相对位置时,要先找到target这个目录下的地址,然后再找具体的文件。
如图所示,要读取resource下Excel文件夹下的Excel文件,target目录下已经生成了对应的文件:
使用下列方法,可获取${项目名}/target/classes/绝对路径
//获取编译后生成的${项目名}/target/classes/路径
val resource: URL = this.getClass.getClassLoader.getResource("")
println("resource1 => " + resource)
打印结果如下:
resource1 => file:/E:/mycode/Spark/mylearn/target/classes/
拼接${项目名}/target/classes/路径与相对路径excel/test11.xlsx,即可获取到test11.xlsx文件数据
def readExcelFile(spark:SparkSession,className:Class[_],file:String) ={
//获取编译后生成的${项目名}/target/classes/路径
val resource: URL = className.getClassLoader.getResource("")
//拼接resource路径与文件的相对路径
//拼接完成为file:/D:/IdeaProjects/ZHBR_BIGDATA/target/classes/excel/test11.xlsx
//file为要读取的文件的相对路径
val filePath = resource+file
//读取excel数据,并返回数据
spark.read.format("com.crealytics.spark.excel").
option("useHeader", "true"). //是否有表头作为表的字段名
option("treatEmptyValuesAsNulls", "true"). //是否将空值设置为null
option("inferSchema", "true"). //是否自动推断字段类型
option("addColorColumns", "False"). //是否添加颜色
load(filePath)
}
Excel文件夹下两个文件数据结构相同,如同时读取一个文件夹下的多个文件,可参考:
def readMoreExcelFile(spark:SparkSession,className:Class[_],files: String) ={
//获取编译后生成的${项目名}/target/classes/路径
val resource: URL = className.getClassLoader.getResource("")
//拼接resource绝对路径与files相对路径,拼接完成为file:/D:/IdeaProjects/ZHBR_BIGDATA/target/classes/excel
//需要将路径前的'file:/'去掉,否则报错
//files为要读取的文件夹相对路径
val path:String = resource.toString+files
val filePath = path.substring(5)
//创建file文件夹
val dir = new File(filePath)
//将dir文件夹内文件排序,并转为String格式
val excelFiles = dir.listFiles.sorted.map(f => f.toString)
//读取excel数据
val dfs = excelFiles.map(file => {
spark.read.format("com.crealytics.spark.excel").
option("useHeader", "true"). //是否有表头作为表的字段名
option("treatEmptyValuesAsNulls", "true"). //是否将空值设置为null
option("inferSchema", "true"). //是否自动推断字段类型
option("addColorColumns", "False"). //是否添加颜色
load(file)
})
//合并数据,并返回
dfs.reduce(_.union(_))
}
上一篇: IDEA相对路径问题
下一篇: python基础知识补充