2021-09-20 IO流(切割文件)

2021-10-13  本文已影响0人  Denholm
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;

public class 切割合并文件 {

    public static void main(String[] args) throws IOException {
        int count = cutFile();
        merge(count);
    }

    // 切割文件
    public static int cutFile() throws IOException {
        FileInputStream fis = new FileInputStream("E:\\abc.pdf");
        FileOutputStream fos;
        byte[] buf = new byte[1024 * 1024];
        int len;
        int count = 1;
        while ((len = fis.read(buf)) != -1) {
            fos = new FileOutputStream("E:\\splitFiles\\" + (count++) + ".part");
            fos.write(buf, 0, len);
            fos.close();
        }
        System.out.println(count);
        fis.close();
        return count;
    }

    // 合并文件
    public static void merge(int count) throws IOException {
        List<FileInputStream> list = new ArrayList<>();
        for (int i = 1; i <= count; i++) {
            list.add(new FileInputStream("E:\\splitFiles\\" + i + ".part"));
        }
        Iterator<FileInputStream> iterator = list.iterator();
        Enumeration<FileInputStream> en = new Enumeration<FileInputStream>() {
            @Override
            public boolean hasMoreElements() {
                return iterator.hasNext();
            }

            @Override
            public FileInputStream nextElement() {
                return iterator.next();
            }
        };
        SequenceInputStream sis = new SequenceInputStream(en);
        FileOutputStream fos = new FileOutputStream("E:\\splitFiles\\merge.pdf");
        byte[] buf = new byte[1024 * 1024];
        int len;
        while ((len = sis.read(buf)) != -1) {
            fos.write(buf, 0, len);
        }
        fos.close();
        sis.close();
    }

}
上一篇 下一篇

猜你喜欢

热点阅读