要在路径不存在时自动创建文件夹,可以使用Java的File类来实现。你可以在保存Excel文件之前检查目标文件夹是否存在,如果不存在,则创建该文件夹。以下是修改后的代码示例:
import java.io.{File, FileOutputStream}
import org.apache.poi.hssf.usermodel._
import org.apache.spark.sql.{DataFrame, Row}
def saveAsExcels(df: DataFrame, pageSize: Int, fileName: String): Unit = {
val rows: Array[Row] = df.collect()
val groups: Array[Array[Row]] = rows.grouped(pageSize).toArray
groups.zipWithIndex.foreach { case (groupRows, index) =>
val workbook: HSSFWorkbook = new HSSFWorkbook()
val sheet: HSSFSheet = workbook.createSheet("Sheet1")
// 写入表头
val headerRow: HSSFRow = sheet.createRow(0)
df.columns.zipWithIndex.foreach { case (columnName, columnIndex) =>
headerRow.createCell(columnIndex).setCellValue(columnName)
}
// 写入数据行
groupRows.zipWithIndex.foreach { case (row, rowIndex) =>
val excelRowIndex = rowIndex + 1 // 跳过表头行
val excelRow: HSSFRow = sheet.createRow(excelRowIndex)
row.schema.fieldNames.zipWithIndex.foreach { case (columnName, columnIndex) =>
excelRow.createCell(columnIndex).setCellValue(row.getAs[String](columnName))
}
}
// 创建目标文件夹(如果不存在)
val folderPath = new File(fileName).getParentFile
if (!folderPath.exists()) {
folderPath.mkdirs()
}
// 将生成的Excel保存到文件中
val fileOut: FileOutputStream = new FileOutputStream(s"${fileName}_$index.xlsx")
workbook.write(fileOut)
fileOut.close()
}
}
在上述代码中,我们使用new File(fileName).getParentFile
获取文件夹的路径,并通过调用mkdirs()
方法来创建目标文件夹。这样,在保存Excel文件之前会检查文件夹是否存在,如果不存在,则会自动创建。
请注意,该代码示例假定传递给saveAsExcels()
方法的fileName
参数是包含文件名和路径的完整字符串。
内容由零声教学AI助手提供,问题来源于学员提问