Java文件拆分与合并

思路:用字节流把文件拆分,然后用序列流合并字节流。

练习:文件切割与合并

实现对大文件的切割与合并。按指定个数切(如把一个文件切成10份)或按指定大小切(如每份最大不超过10M),这两种方式都可以。

示例程序说明:

1)文件切割:把一个文件切割成多个碎片,每个碎片的大小不超过1M。自己可把功能进一步扩展:切割前的文件名、长度,切割后的碎片个数、文件名等信息可写到第一个碎片中或另外用properties把这些写到配置文件中。
2)文件合并:这里简单假设已知被合并目录的File对象和原文件的名字。其实这些完全可以做成活的,如把这些信息保存在碎片文件或配置文件,也可以同样用文件选择对话框来读取用户的选择。

代码实现:

package outIn2.fileCutAndMerge;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector;

/*
 * 1)学习切割文件
 * 2)合并文件
 */
public class Test2 {
	/*
	 * crossLine-切割线
	 */
	static int crossLine = 1024;
	static String newFileName = "Tetris";

	public static void main(String[] args) {
		// test1();
		test2();
	}

	/*
	 * 合并文件
	 */
	private static void test2() {
		/*
		 * 先得到需要合并文件的数量,
		 * 然后合并。
		 */
		File f = new File("d:/ex/a/test1");
		File[] files = null;
		if (f.isDirectory()) {
			files = f.listFiles();
		}
		String[] strs = new String[files.length];
		for (int i = 0; i < strs.length; i++) {
			strs[i] = files[i].getName();
		}
		BufferedInputStream[] bins = new BufferedInputStream[files.length];
		Vector<BufferedInputStream> v = new Vector<BufferedInputStream>();
		BufferedOutputStream bout = null;
		try {
			for (int i = 0; i < bins.length; i++) {
				bins[i] = new BufferedInputStream(new FileInputStream(
						"d:/ex/a/test1/" + strs[i]));
				v.add(bins[i]);
			}
			Enumeration<BufferedInputStream> en = v.elements();
			SequenceInputStream sin = new SequenceInputStream(en);
			int len = 0;
			byte[] buf = new byte[1024];
			bout = new BufferedOutputStream(new FileOutputStream(
					"d:/ex/a/test2/Tetris_Successful.zip"));
			while ((len = sin.read(buf)) != -1) {
				bout.write(buf, 0, len);
			}
			bout.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			for (int i = 0; i < bins.length; i++) {
				if (bins != null) {
					try {
						bins[i].close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
			if (bout != null) {
				try {
					bout.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	/*
	 * 拆分文件
	 */
	public static void test1() {
		// FileInputStream fin = null;
		// FileOutputStream fout = null;
		BufferedInputStream bin = null;
		BufferedOutputStream bout = null;
		try {
			bin = new BufferedInputStream(new FileInputStream(
					"d:/ex/a/Tetris0.zip"));
			bout = new BufferedOutputStream(new FileOutputStream(
					"d:/ex/a/test1/Tetris1.zip"));
			/*
			 * 一次搬1KB的数据。
			 */
			int count = 0;
			int len = 0;
			int num = 2;
			byte[] buf = new byte[1024];
			while ((len = bin.read(buf)) != -1) {
				/*
				 * 写入新文件
				 */
				bout.write(buf, 0, len);
				count++;
				if (count >= crossLine) {
					bout.close();
					bout = new BufferedOutputStream(new FileOutputStream(
							"d:/ex/a/test1/Tetris" + num + ".zip"));
					num++;
					count = 0;
				}
				if (num >= 45) {
					break;
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (bin != null) {
				try {
					bin.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (bout != null) {
				try {
					bout.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

}






这个文件是myeclipse项目,有包名。


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Java文件拆分合并示例: 1. Java文件拆分 假设我们有一个名为 `MyClass.java` 的Java文件,其中包含了两个类:`MyClass` 和 `MyUtil`。现在我们想要将这两个类分别放到不同的文件中进行管理。 首先,我们可以创建一个名为 `MyClass.java` 的新文件,将 `MyClass` 类的定义放进去: ```java // MyClass.java package com.example.myproject; public class MyClass { // MyClass 的定义 } ``` 接下来,我们创建一个名为 `MyUtil.java` 的新文件,将 `MyUtil` 类的定义放进去: ```java // MyUtil.java package com.example.myproject; public class MyUtil { // MyUtil 的定义 } ``` 最后,我们需要在 `MyClass` 文件中使用 `import` 语句来导入 `MyUtil` 类: ```java // MyClass.java package com.example.myproject; import com.example.myproject.MyUtil; public class MyClass { // MyClass 的定义 } ``` 2. Java文件合并 假设我们已经将 `MyClass` 和 `MyUtil` 类分别放到了 `MyClass.java` 和 `MyUtil.java` 两个文件中,现在我们想要将它们合并成一个文件。 首先,我们可以在 `MyClass.java` 文件中删除 `import` 语句,因为 `MyUtil` 类已经在同一目录下的 `MyUtil.java` 文件中定义了。 接着,我们将 `MyUtil` 类的定义粘贴到 `MyClass.java` 文件中: ```java // MyClass.java package com.example.myproject; public class MyClass { // MyClass 的定义 // MyUtil 的定义 public class MyUtil { // MyUtil 的定义 } } ``` 最后,我们将文件名修改为 `MyClassAndMyUtil.java`,就完成了Java文件合并。 总之,Java文件拆分合并可以根据文件中的类或接口进行分割和合并,需要注意包名、导入语句和代码依赖关系的设置,以便于编译器能够正确识别代码的结构和依赖关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值