首页 > 系统相关 >Java 合并多个碎片文件到一个文件,也可以直接使用linux cat命名

Java 合并多个碎片文件到一个文件,也可以直接使用linux cat命名

时间:2023-03-06 13:34:17浏览次数:37  
标签:文件 java inFiles file linux Java data CombineFile out

Java 合并多个碎片文件到一个文件,也可以直接使用linux cat命名

linux cat命令

cat *.zip.* > out.zip

java工具使用方式

# 编译
javac CombineFile.java
# 执行
java CombineFile D:/data/out.zip D:/data/test.zip.01 D:/data/test.zip.02
USAGE: CombineFile outFile inFiles...
	outFile 输出文件名
	inFiles 输入文件名,支持多个
	如: java CombineFile D:/data/file D:/data/dir/
	如: java CombineFile D:/data/file D:/data/dir1/ D:/data/dir2/file1

源代码 CombineFile.java

// package me.muphy.file;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class CombineFile {
    public static void main(String[] args) throws IOException {
        if (args.length < 2) {
            System.out.println("USAGE: CombineFile outFile inFiles...");
            System.out.println("\toutFile 输出文件名");
            System.out.println("\tinFiles 输入文件名,支持多个");
            System.out.println("\t如: CombineFile D:/data/file D:/data/dir/");
            System.out.println("\t如: CombineFile D:/data/file D:/data/dir1/ D:/data/dir2/file1");
            return;
        }
        // 1.获取所有的输入文件
        String outFileName = args[0];
        List<File> inFiles = new ArrayList<>();
        for (int i = 1; i < args.length; i++) {
            File file = new File(args[i]);
            if (!file.exists()) {
                System.out.println(args[i] + " 文件或者目录不存在!");
                return;
            }
            if (file.isFile()) {
                inFiles.add(file);
            } else if (file.isDirectory()) {
                File[] files = file.listFiles();
                if (files == null || files.length < 1) {
                    System.out.println(args[i] + " 目录不存在任何文件!");
                    return;
                }
                inFiles.addAll(Arrays.asList(files));
            }
        }
        if (inFiles.isEmpty()) {
            System.out.println("目录不存在任何文件!");
            return;
        }
        inFiles.sort(Comparator.comparing(File::getName));
        // 2.复制文件内容
        File fo = new File(outFileName);
        FileOutputStream fos = new FileOutputStream(fo);
        FileInputStream fis = null;
        try {
            for (File file : inFiles) {
                fis = new FileInputStream(file);
                byte[] buf = new byte[1024];
                int length;
                while ((length = fis.read(buf)) > 0) {
                    fos.write(buf, 0, length);
                }
                fis.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            if (fis != null) {
                try {
                    fis.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

}

标签:文件,java,inFiles,file,linux,Java,data,CombineFile,out
From: https://www.cnblogs.com/muphy/p/17183518.html

相关文章

  • centos7.9系统禁用selinux脚本
    临时关闭setenforcepermissive永久关闭配置文件路径/etc/sysconfig/selinux修改配置项SELINUX=enforcing为SELINUX=disabledsed-i's/SELINUX=enforcing/'SEL......
  • Linux
    下载:通过finalshell                ......
  • 阿里云OSS文件上传
    阿里OSS文件上传Controllerpackagecom.zft.web.controller.common;importcom.zft.adaptor.common.constants.FileConstants;importcom.zft.adaptor.utils.file.Com......
  • 删除 VS Code 编辑器右侧的文件预览
    这个美女是最近一次更新后出现的,让我很分心。我搜索了菜单,但没有找到任何设置来删除它。有什么办法可以从编辑器中消除它吗?解答http://www.stackoverflow.ink......
  • 你也能成为“黑客”高手——趣谈Linux Shell编程语言
    作者:京东零售杜兴文我们看过很多在电脑命令行敲一些命令并给观众展示很高科技的画面感的电影,比如《盗梦空间》《操作系统革命》《代码》等等,再想想电影黑客帝国中的画面......
  • 我应该提交 yarn.lock 文件吗?它有什么用?
    yarn.lock执行.yarn后,Yarn会创建一个文件yarninstall。这应该提交到存储库还是忽略?它是做什么用的?解答http://www.stackoverflow.ink/posts/wo-ying-gai-t......
  • JavaScript:Class.method 与 Class.prototype.method
    以下两个声明有什么区别?Class.method=function(){/*code*/}Class.prototype.method=function(){/*codeusingthis.values*/}把第一条语句看成......
  • 文件上传
    文件上传packagecom.example.demo.base.file;importjava.io.*;importjava.net.URLDecoder;importjava.net.URLEncoder;importjava.time.LocalDateTime;import......
  • Mybatis映射文件配置
    <?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernam......
  • linux 查看动态库里的函数
    nm-Dlibaudio_frame_api.so上面是linux的,下面是Android的(针对的是targe_os=android,targe_cpu=arm等动态库的)/home/jackey/code/webrtc-checkout/src/third_p......