对文件进行分割与组合:
-c 组合
-s 分割
例如:
-s 1000(字节数) ./src/test.txt
-c 16(下标文件数) ./src/text.txt
package com.tata.java.io;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
public class SequenceStreamDemo {
public static void main(String[] args) {
try {
// args[0]: 指定分割(s)或连接(c)
switch (args[0].charAt(1)) {
case 's':
// args[1]: 每个分割文件的大小
int size = Integer.parseInt(args[1]);
// args[2]: 指定要被分割的文件名称
seperate(args[2], size);
break;
case 'c':
// args[1]: 指定要被组合的文件个数
int number = Integer.parseInt(args[1]);
// args[2]: 组合后的文件名称
concatenate(args[2], number);
break;
}
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Using: java UseSequenceStream [-s/-c]"
+ " (size/number) filename");
System.out.println("-s: 分割文件\n-c: 组合文件");
} catch (IOException e) {
e.printStackTrace();
}
}
// 分割文件
public static void seperate(String filename, int size) throws IOException {
FileInputStream fileInputStream = new FileInputStream(
new File(filename));
BufferedInputStream bufInputStream = new BufferedInputStream(
fileInputStream);
byte[] data = new byte[1];
int count = 0;
// 还原文件大小及指定分割的大小
// 决定要分割为几个文件
if (fileInputStream.available() % size == 0)
count = fileInputStream.available() / size;
else
count = fileInputStream.available() / size + 1;
// 开始进行分割
for (int i = 0; i < count; i++) {
int num = 0;
// 分割的文件加上下划线与编号
File file = new File(filename + "_" + (i + 1));
BufferedOutputStream bufOutputStream = new BufferedOutputStream(
new FileOutputStream(file));
while (bufInputStream.read(data) != -1) {
bufOutputStream.write(data);
num++;
if (num == size) {
// 分割出一个文件
bufOutputStream.flush();
bufOutputStream.close();
break;
}
}
if (num < size) {
bufOutputStream.flush();
bufOutputStream.close();
}
}
System.out.println("分割为" + count + "个文件");
}
// 连接文件
public static void concatenate(String filename, int number)
throws IOException {
// 收集文件用的List
List<InputStream> list = new ArrayList<InputStream>();
for (int i = 0; i < number; i++) {
// 文件名必须为下划线加上编号
File file = new File(filename + "_" + (i + 1));
list.add(i, new FileInputStream(file));
}
final Iterator<InputStream> iterator = list.iterator();
// SequenceInputStream 需要一个Enumeration对象来构建
Enumeration<InputStream> enumation = new Enumeration<InputStream>() {
public boolean hasMoreElements() {
return iterator.hasNext();
}
public InputStream nextElement() {
return iterator.next();
}
};
// 建立SequenceInputStream// 并使用BufferedInputStream
BufferedInputStream bufInputStream = new BufferedInputStream(
new SequenceInputStream(enumation), 8192);
BufferedOutputStream bufOutputStream = new BufferedOutputStream(
new FileOutputStream(filename), 8192);
byte[] data = new byte[1];
// 读取所有文件数据并写入目的地文件
while (bufInputStream.read(data) != -1)
bufOutputStream.write(data);
bufInputStream.close();
bufOutputStream.flush();
bufOutputStream.close();
System.out.println("组合" + number + "个文件 OK!!");
}
}
分享到:
相关推荐
NIO2基础介绍 NIO2(Non-Blocking I/O)是一种高性能的I/O操作方式,自Java 7开始引入,提供了许多新的API和方法来处理文件操作。下面是对NIO2基础的介绍,包括文件路径、Path类简介、符号链接等知识点。 文件路径...
### Java-NIO2教程知识点详解 #### I/O发展简史 - **JDK1.0-1.3**: 在此期间,Java的I/O模型主要依赖于传统的阻塞I/O方式,这种模式下,应用程序在等待I/O操作完成时无法执行其他任务,导致效率低下。此外,当时的...
### JDK 7 NIO2 新特性详解 #### 引言 随着 Java 7 的发布,NIO (New I/O) 接口迎来了重要的更新,即 NIO.2 或称为 MNI (More New I/O)。NIO.2 增强了 Java 1.4 中的 NIO API,为开发人员提供了更为强大的 I/O ...
Novation Nio 2&4 是一款时尚的USB音频接口,设计用于为音乐制作人提供高质量的录音和监听解决方案。用户手册是理解该设备操作的关键,它详细介绍了Nio的所有控制和连接方式,以及如何录制各种音源、设置输出流a和b...
Java IO NIO and NIO 2 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn...
【标题】:“Tomcat 8.5.56 X64 NIO2模式性能优化版+垃圾处理机制.zip”指的是一个特别针对Windows x64平台优化的Tomcat 8.5.56版本,该版本集成了NIO2(非阻塞I/O)模式,并对垃圾收集(Garbage Collection, GC)...
Java I/O, NIO以及NIO2是Java编程语言中处理输入输出操作的重要API集合,它们分别代表着不同的I/O处理方式和技术。 Java I/O是指传统的I/O操作,涉及经典的I/O类库,如File、RandomAccessFile以及各种流类(stream ...
### Pro Java 7 NIO2:深入理解Path类与文件系统操作 #### 一、引言 《Pro Java 7 NIO2》是一本专注于Java 7中的新I/O(NIO.2)特性的书籍,它介绍了如何利用Java 7的新特性来处理文件和网络操作。本书的核心在于...
Java IO NIO and NIO 2 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
t-io是基于aio(nio2)的网络编程框架,和netty属于同类,但t-io更注重开发一线工程师的感受,提供了大量和业务相关的API。基于t-io来开发IM、TCP私有协议、RPC、游戏服务器端、推送服务、实时监控、物联网、UDP、...
《深入理解Java 7 NIO2:Path类的探索与应用》 在Java 7的NIO2(JSR203:Java平台上的更多新I/O API)更新中,`java.nio.file.Path` 类成为了核心组件之一,为开发者提供了更高效、更直观的文件系统操作接口。本文...
Java NIO2,即New Input/Output,是Java在JDK 1.7引入的一组新的I/O API,是对原始Java I/O模型的扩展。它提供了比标准Java IO更为高效和灵活的I/O操作方式,特别是在处理大量并发I/O请求时,NIO2的异步特性显得尤为...
标题 "kie-nio2-model-6.0.0.CR2.zip" 暗示着这是一个与KIE(Knowledge-Intensive Enterprise)项目相关的文件,其中包含NIO2模型的一个版本。NIO2(New IO 2)是Java平台中用于处理输入/输出操作的非阻塞I/O库,它...
[nio2 " 0.2.1 " ] 动机 创建这个库有两个主要原因: 允许 clojure 开发人员利用 NIO2 功能 使文件系统 IO 在 clojure 中可测试 引入了与文件系统进行惰性交互的能力(例如,遍历目录结构或查看文件),改进了对...
标题中的"kie-nio2-fs-6.0.0.Beta2.zip"是一个软件库或框架的压缩包,看起来是KIE(Knowledge-Driven Innovation Engine)项目的一部分,可能与业务规则管理和决策支持系统相关。NIO2是Java非阻塞I/O(New I/O 2)的...
总结来说,Java对象序列化是将对象转换为字节流以便存储或传输的关键技术,而NIO和NIO2则提供了高效的I/O操作方式,两者结合可以提升程序的性能和灵活性。在实际开发中,理解并熟练掌握这些概念对于编写高效、可靠的...
Java IO、NIO以及NIO.2是Java中用于处理输入/输出操作的三种主要机制。本书《Java IO, NIO and NIO.2》旨在深入浅出地介绍这些机制,同时书中内容均为英文。接下来将详细介绍这些知识点。 **Java IO** Java IO是...
在Java中,NIO2(New IO 2)是Java 7引入的一组新API,极大地扩展了Java的I/O功能,特别是在文件操作方面。NIO2引入了许多改进,包括异步文件操作、文件系统感知以及更强大的文件拷贝功能。本示例将详细讲解如何使用...