(Java、Scala)读取IDEA maven项目resource下相对路径文件

在使用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(_))
  }
发布了68 篇原创文章 · 获赞 4 · 访问量 7393

猜你喜欢

转载自blog.csdn.net/weixin_44455388/article/details/103088933