Kotlin 代码:将同一文件夹下的文件按当天日期合并压缩,不覆盖

本示例代码使用 Kotlin 语言,将同一文件夹下的文件按当天日期分组,并将每个日期的文件合并为一个压缩文件,输出到指定的文件夹中,避免覆盖已有压缩文件。

import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
import java.util.zip.ZipEntry
import java.util.zip.ZipOutputStream
import java.text.SimpleDateFormat
import java.util.Date

fun main() {
    val folderPath = "/path/to/folder" // 替换为实际文件夹的路径
    val outputFolderPath = "/path/to/output/folder" // 替换为实际输出文件夹的路径
    
    val files = File(folderPath).listFiles()
    val groupedFiles = files.groupBy { getFileDate(it) }
    
    for ((date, fileList) in groupedFiles) {
        val outputFileName = SimpleDateFormat("yyyy-MM-dd").format(date) + ".zip"
        val outputFile = File(outputFolderPath, outputFileName)
        
        if (outputFile.exists()) {
            continue // 如果输出文件已存在,则跳过
        }
        
        ZipOutputStream(FileOutputStream(outputFile)).use { zipOut ->
            for (file in fileList) {
                FileInputStream(file).use { fileIn ->
                    val entry = ZipEntry(file.name)
                    zipOut.putNextEntry(entry)
                    
                    val buffer = ByteArray(1024)
                    var len: Int
                    while (fileIn.read(buffer).also { len = it } > 0) {
                        zipOut.write(buffer, 0, len)
                    }
                    
                    zipOut.closeEntry()
                }
            }
        }
        
        println("合并压缩完成:$outputFileName")
    }
}

fun getFileDate(file: File): Date {
    val fileName = file.nameWithoutExtension
    val dateFormat = SimpleDateFormat("yyyy-MM-dd-HH")
    return dateFormat.parse(fileName)
}

在上面的代码中,需要将/path/to/folder/path/to/output/folder替换为实际的文件夹路径和输出文件夹路径。代码会将给定文件夹下的文件按照日期进行分组,然后将每个日期的文件合并为一个压缩文件,输出到指定的输出文件夹中。代码中使用了java.util.zip包来进行压缩操作,并使用java.text.SimpleDateFormat来解析文件名中的日期。


原文地址: https://www.cveoy.top/t/topic/fp94 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录