`
yangwn
  • 浏览: 77067 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论
  • icewubin: kimmking 写道icewubin 写道Dollyn 写道 ...
    Java
  • kimmking: icewubin 写道Dollyn 写道我十分怀疑最后一条,很 ...
    Java
  • beneo: 完全忽略了一個好的JVM的優化能力 難道java是C編譯器么 ...
    Java
  • icewubin: Dollyn 写道我十分怀疑最后一条,很多编译器都会自动做类似 ...
    Java
  • Dollyn: 我十分怀疑最后一条,很多编译器都会自动做类似优化吧(不知道JD ...
    Java

NIO2

    博客分类:
  • JAVA
阅读更多

对文件进行分割与组合:

-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基础介绍 NIO2(Non-Blocking I/O)是一种高性能的I/O操作方式,自Java 7开始引入,提供了许多新的API和方法来处理文件操作。下面是对NIO2基础的介绍,包括文件路径、Path类简介、符号链接等知识点。 文件路径...

    Java-NIO2教程

    ### Java-NIO2教程知识点详解 #### I/O发展简史 - **JDK1.0-1.3**: 在此期间,Java的I/O模型主要依赖于传统的阻塞I/O方式,这种模式下,应用程序在等待I/O操作完成时无法执行其他任务,导致效率低下。此外,当时的...

    JDK_7_NIO2

    ### 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 用户说明书.pdf

    Novation Nio 2&4 是一款时尚的USB音频接口,设计用于为音乐制作人提供高质量的录音和监听解决方案。用户手册是理解该设备操作的关键,它详细介绍了Nio的所有控制和连接方式,以及如何录制各种音源、设置输出流a和b...

    Java IO NIO and NIO 2 无水印pdf

    Java IO NIO and NIO 2 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn...

    tomcat8.5.56_X64_nio2模式性能优化版+垃圾处理机制.zip

    【标题】:“Tomcat 8.5.56 X64 NIO2模式性能优化版+垃圾处理机制.zip”指的是一个特别针对Windows x64平台优化的Tomcat 8.5.56版本,该版本集成了NIO2(非阻塞I/O)模式,并对垃圾收集(Garbage Collection, GC)...

    Java I-O NIO and NIO2

    Java I/O, NIO以及NIO2是Java编程语言中处理输入输出操作的重要API集合,它们分别代表着不同的I/O处理方式和技术。 Java I/O是指传统的I/O操作,涉及经典的I/O类库,如File、RandomAccessFile以及各种流类(stream ...

    Pro Java 7 NIO2

    ### Pro Java 7 NIO2:深入理解Path类与文件系统操作 #### 一、引言 《Pro Java 7 NIO2》是一本专注于Java 7中的新I/O(NIO.2)特性的书籍,它介绍了如何利用Java 7的新特性来处理文件和网络操作。本书的核心在于...

    Java IO NIO and NIO 2 epub

    Java IO NIO and NIO 2 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    t-io是基于aio(nio2)的网络编程框架和netty属于同类

    t-io是基于aio(nio2)的网络编程框架,和netty属于同类,但t-io更注重开发一线工程师的感受,提供了大量和业务相关的API。基于t-io来开发IM、TCP私有协议、RPC、游戏服务器端、推送服务、实时监控、物联网、UDP、...

    PRO JAVA 7 NIO2

    《深入理解Java 7 NIO2:Path类的探索与应用》 在Java 7的NIO2(JSR203:Java平台上的更多新I/O API)更新中,`java.nio.file.Path` 类成为了核心组件之一,为开发者提供了更高效、更直观的文件系统操作接口。本文...

    JavaNIO2教程[定义].pdf

    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-nio2-model-6.0.0.CR2.zip" 暗示着这是一个与KIE(Knowledge-Intensive Enterprise)项目相关的文件,其中包含NIO2模型的一个版本。NIO2(New IO 2)是Java平台中用于处理输入/输出操作的非阻塞I/O库,它...

    nio2:java.nio.file 包周围的 clojure 包装器

    [nio2 " 0.2.1 " ] 动机 创建这个库有两个主要原因: 允许 clojure 开发人员利用 NIO2 功能 使文件系统 IO 在 clojure 中可测试 引入了与文件系统进行惰性交互的能力(例如,遍历目录结构或查看文件),改进了对...

    kie-nio2-fs-6.0.0.Beta2.zip

    标题中的"kie-nio2-fs-6.0.0.Beta2.zip"是一个软件库或框架的压缩包,看起来是KIE(Knowledge-Driven Innovation Engine)项目的一部分,可能与业务规则管理和决策支持系统相关。NIO2是Java非阻塞I/O(New I/O 2)的...

    Java 对象序列化 NIO NIO2详细介绍及解析

    总结来说,Java对象序列化是将对象转换为字节流以便存储或传输的关键技术,而NIO和NIO2则提供了高效的I/O操作方式,两者结合可以提升程序的性能和灵活性。在实际开发中,理解并熟练掌握这些概念对于编写高效、可靠的...

    Java IO, NIO and NIO.2

    Java IO、NIO以及NIO.2是Java中用于处理输入/输出操作的三种主要机制。本书《Java IO, NIO and NIO.2》旨在深入浅出地介绍这些机制,同时书中内容均为英文。接下来将详细介绍这些知识点。 **Java IO** Java IO是...

    java使用nio2拷贝文件的示例

    在Java中,NIO2(New IO 2)是Java 7引入的一组新API,极大地扩展了Java的I/O功能,特别是在文件操作方面。NIO2引入了许多改进,包括异步文件操作、文件系统感知以及更强大的文件拷贝功能。本示例将详细讲解如何使用...

Global site tag (gtag.js) - Google Analytics