SpringBoot解压zip包,读取每个文件内容

SpringBoot解压zip包,读取每个文件内容

一、运用场景

获取本地压缩包,解压后根据文件名称及类型,对读取的文件内容进行业务处理。

二、POM文件依赖

<!--读取文件-->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>4.1.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>4.1.2</version>
		</dependency>

		<!--阿里ocr-->
		<dependency>
			<groupId>com.aliyun</groupId>
			<artifactId>aliyun-java-sdk-core</artifactId>
			<version>3.4.0</version>
		</dependency>
		<dependency>
			<groupId>software.amazon.awssdk</groupId>
			<artifactId>aws-sdk-java</artifactId>
			<version>2.17.0</version>
		</dependency>

		<!--百度ocr-->
		<dependency>
			<groupId>com.baidu.aip</groupId>
			<artifactId>java-sdk</artifactId>
			<version>4.11.3</version>
			<exclusions>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-simple</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

三、代码部分

1、控制层方法

@GetMapping(value = "/localZipFile")
    public Result localZipFile(){
        String filePath = "C:\\Users\\Administrator\\Desktop\\11.zip";
        List<String> list = new ArrayList<>();
        try {
            ZipFile zipFile = new ZipFile(filePath);
            Enumeration<? extends ZipEntry> entries = zipFile.getEntries();
            //获取zip包下文件名
            while (entries.hasMoreElements()) {
                list.add(entries.nextElement().getName());
            }
            String packFileStr = "C:\\Users\\Administrator\\Desktop\\zip";
            File file = new File(filePath);
            String packFilePath = packFileStr + File.separator;
            //解压到指定路径
            UnPackeUtil.unPackZip(file, null,packFilePath);

            File readFileDir = new File(packFilePath);
            List<String> strings = new ArrayList<>();
            //获取文件夹下文件集合
            File[] files = readFileDir.listFiles();
            for (File file1 : files) {
                String savePath = MeFileUtils.uploadLocal(file1,"");
                FileInputStream inputStream = new FileInputStream(file1);
                String fileExtension =MeFileUtils. getFileExtension(file1.getName());
                //返回读取的文件内容
                String fileContent = MeFileUtils.readGsFile(inputStream,fileExtension,file1);
                strings.add(savePath);
                strings.add(fileContent);
            }
            return Result.OK(strings);
        } catch (IOException e) {
            e.printStackTrace();
            return Result.error(e.getMessage());
        }

2、MeFileUtils工具类

//上传
public class MeFileUtils{
	public static String uploadLocal(File file,String bizPath){
		try {
            String ctxPath = uploadpath;
            String fileName = null;
            File file = new File(ctxPath + File.separator + bizPath + File.separator );
            if (!file.exists()) {
                file.mkdirs();// 创建文件根目录
            }
            // 获取文件名
            String orgName = mf.getName();
            orgName = CommonUtils.getFileName(orgName);
            if(orgName.indexOf(".")!=-1){
                fileName = orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf("."));
            }else{
                fileName = orgName+ "_" + System.currentTimeMillis();
            }
            String savePath = file.getPath() + File.separator + fileName;
            File savefile = new File(savePath);
            FileCopyUtils.copy(mf, savefile);
            String dbpath = null;
            if(oConvertUtils.isNotEmpty(bizPath)){
                dbpath = bizPath + File.separator + fileName;
            }else{
                dbpath = fileName;
            }
            if (dbpath.contains("\\")) {
                dbpath = dbpath.replace("\\", "/");
            }
            return dbpath;
        } catch (IOException e) {
            log.error(e.getMessage(), e);
        }
        return "";
	}

	//获取文件名
	public String getFileExtension(String filename) {
        int dotIndex = filename.lastIndexOf(".");
        if (dotIndex > 0 && dotIndex < filename.length() - 1) {
            return filename.substring(dotIndex + 1).toLowerCase();
        }
        return "";
    }
	
	//获取文件内容
	public String readGsFile(FileInputStream inputStream,String fileExtension,File txtFile) {
        try {
            if (fileExtension.equalsIgnoreCase("doc") || fileExtension.equalsIgnoreCase("docx")) {
                // 处理Word文档
                XWPFDocument document = new XWPFDocument(inputStream);
                // 读取每个段落的文本内容
                StringBuilder content = new StringBuilder();
                for (XWPFParagraph paragraph : document.getParagraphs()) {
                    for (XWPFRun run : paragraph.getRuns()) {
                        content.append(run.text());
                    }
                }
                // 关闭文档
                document.close();
                return content.toString();
            }else if(fileExtension.equalsIgnoreCase("txt")){
                StringBuffer buffer = new StringBuffer();
                // 创建Scanner对象来读取文件内容
                Scanner scanner = new Scanner(txtFile);
                // 逐行读取文件内容并输出
                while (scanner.hasNextLine()) {
                    String line = scanner.nextLine();
                    System.out.println(line);
                    buffer.append(line).append(",");
                }
                // 关闭Scanner对象
                scanner.close();
                return buffer.toString();
            } else if (fileExtension.equalsIgnoreCase("xls") || fileExtension.equalsIgnoreCase("xlsx")) {
                // 处理Excel文档
                XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
                return "";
            } else if (fileExtension.equalsIgnoreCase("pdf")) {
                // 处理PDF文档
                PDDocument document = PDDocument.load(inputStream);
                // 创建 PDFTextStripper 对象
                PDFTextStripper textStripper = new PDFTextStripper();
                // 读取文档内容
                String content = textStripper.getText(document);
                document.close();
                return content;
            }else if (fileExtension.equalsIgnoreCase("jpg") || fileExtension.equalsIgnoreCase("png")) {
                // 处理图片
                try {
                    // 调用OCR工具类识别文件内容
                    String result = BaiduOCRUtil.recognizeFile(txtFile.getAbsolutePath());
                    return result;
                } catch (Exception e) {
                    e.printStackTrace();
                    return "";
                }
            } else {
                // 其他文件格式
                inputStream.close();
                return "";
            }
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
    }
}

3、BaiduOCRUtil工具类

public class BaiduOCRUtil {

    private static final String APP_ID = "";
    private static final String API_KEY = "";
    private static final String SECRET_KEY = "";

    public static String recognizeFile(String filePath) {
        AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);

        // 设置可选参数
        HashMap<String, String> options = new HashMap<>();
        options.put("language_type", "CHN_ENG");
        options.put("detect_direction", "true");
        options.put("detect_language", "true");
        options.put("probability", "true");

        // 调用百度云OCR服务识别文件内容
        JSONObject response = client.basicGeneral(filePath, options);

        // 解析识别结果
        StringBuilder result = new StringBuilder();
        JSONArray wordsArray = response.getJSONArray("words_result");
        for (int i = 0; i < wordsArray.length(); i++) {
            JSONObject wordsObject = wordsArray.getJSONObject(i);
            String words = wordsObject.getString("words");
            result.append(words).append("\n");
        }

        return result.toString();
    }
}

一个在学习的开发者,勿喷,欢迎交流

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Javajava.util.zip来实现解压zip文件读取内容。下面是一个示例代码: ```java import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class UnzipExample { public static void main(String[] args) { String zipFilePath = "path/to/your/zip/file.zip"; String destinationFolder = "path/to/destination/folder"; try { unzip(zipFilePath, destinationFolder); readContents(destinationFolder); } catch (IOException e) { e.printStackTrace(); } } public static void unzip(String zipFilePath, String destinationFolder) throws IOException { byte[] buffer = new byte[1024]; File folder = new File(destinationFolder); if (!folder.exists()) { folder.mkdirs(); } try (ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(new FileInputStream(zipFilePath)))) { ZipEntry zipEntry; while ((zipEntry = zipInputStream.getNextEntry()) != null) { String entryName = zipEntry.getName(); File entryFile = new File(destinationFolder + File.separator + entryName); if (entryFile.getParentFile() != null && !entryFile.getParentFile().exists()) { entryFile.getParentFile().mkdirs(); } if (!zipEntry.isDirectory()) { int bytesRead; while ((bytesRead = zipInputStream.read(buffer)) != -1) { entryFile.createNewFile(); FileOutputStream fileOutputStream = new FileOutputStream(entryFile); fileOutputStream.write(buffer, 0, bytesRead); fileOutputStream.close(); } } else { entryFile.mkdirs(); } zipInputStream.closeEntry(); } } } public static void readContents(String folderPath) { File folder = new File(folderPath); if (folder.exists() && folder.isDirectory()) { File[] files = folder.listFiles(); if (files != null) { for (File file : files) { if (file.isDirectory()) { System.out.println("Directory: " + file.getName()); } else { System.out.println("File: " + file.getName()); } } } } } } ``` 在上述示例代码中,你需要替换`zipFilePath`和`destinationFolder`变量的值为你实际的zip文件路径和解压后的目标文件夹路径。`unzip`方法负责解压zip文件,`readContents`方法用于读取解压后的文件内容并打印。 请确保你已经正确配置了Java环境,并导入了必要的类和。运行示例代码后,它将解压zip文件并打印出解压后的文件文件夹列表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值