对文件进行分割与组合:
-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!!");
}
}
分享到:
相关推荐
Java IO NIO and NIO 2 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn...
主要是一些关于NIO2的基本操作和内容,内容是网上下载的收集的,适合没有使用过JDK7以上版本或没有使用过新的文件操作的规范的新手。
比较详尽地介绍了JDK1.7开始支持的NIO2技术。 有兴趣的开发者可以了解一下。
JDK1.7新特性,NIO2异步学习笔记。
Novation诺维逊 Nio 2&4 用户说明书.pdf
Java IO NIO and NIO 2 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
java nio2, Pro Java 7 NIO2
t-io是基于aio(nio2)的网络编程框架,和netty属于同类,但t-io更注重开发一线工程师的感受,提供了大量和业务相关的API。基于t-io来开发IM、TCP私有协议、RPC、游戏服务器端、推送服务、实时监控、物联网、UDP、...
完整的讲述了Java的IO,NIO以及NIO2,文档是英文版的,我会陆续翻译其中的NIO章节。
[nio2 " 0.2.1 " ] 动机 创建这个库有两个主要原因: 允许 clojure 开发人员利用 NIO2 功能 使文件系统 IO 在 clojure 中可测试 引入了与文件系统进行惰性交互的能力(例如,遍历目录结构或查看文件),改进了对...
PRO JAVA 7 NIO2
JavaNIO2教程[定义].pdf
tomcat8.5.56_windows_X64_个人优化版+垃圾回收机制+乱码问题处理,可以直接部署,也可供参考学习
.用惰性电极电解下列溶液 (1)NaCl溶液 阴极:2H++2e-===H2↑;...4.铁镍电池(负极—Fe,正极—NiO2,电解液—KOH溶液) 已知Fe+NiO2+2H2OFe(OH)2+Ni(OH)2,则: 负极:Fe-2e-+2OH-===Fe(OH)2;
主要介绍了Java 对象序列化 NIO NIO2详细介绍及解析的相关资料,序列化机制可以使对象可以脱离程序的运行而对立存在,需要的朋友可以参考下
主要介绍了java使用nio2拷贝文件的示例,需要的朋友可以参考下
NIO.2插座测试仪 一个演示应用程序,用于检查是否可以使用在TCP套接字的另一端读取所有成功的写入。 建造 仅通过从命令行运行ant即可在NetBeans中构建... java -cp Nio2Test.jar nio2test.Nio2TestClient [servername]
使用jdk7的NIO2进行文件或文件夹的拷贝移动操作。可以自动创建路径,差异化更新文件,简单的出错重连机制
详细介绍java7中新的nio,英文原版pdf,绝对清晰,非扫描版
手写BIO 线程池 NIO 的maven quickstart项目 csdn博客地址:https://blog.csdn.net/qq_36963950/article/details/106462191