HOW2J Java 文件输入输出流,合并与拆分

Posted 某在斯的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HOW2J Java 文件输入输出流,合并与拆分相关的知识,希望对你有一定的参考价值。

//需要所指目录下确有一个文件供拆分
//多余的另成一个文件
package File;
import java.util.*;
import java.io.*;
public class TestStrem{
	public static void main(String[] args) {
		int eachSize=100*1024//100k;
		File scrFile = new File("d:/javaha/gys.txt");
		splitFile(scrFile,eachSize);
	}
	public static void splitFile(File scrFile,int eachSize) {
		if(0==scrFile.length()) 
			throw new RuntimeException("文件长度为0,不可拆分");
		byte[] fileConent = new byte[(int)scrFile.length()];
		try {
			FileInputStream fis =new FileInputStream(scrFile);
			fis.read(fileConent);
			fis.close();
		}
		catch(IOException e) {
			e.printStackTrace();
		}	
		int fileNumber;
		if(fileConent.length % eachSize==0) 
			fileNumber =(int)(fileConent.length  / eachSize);
		else 
			fileNumber =(int)(fileConent.length  / eachSize )+ 1;
		for(int i=0;i<fileNumber;i++) {
			String eachFilename=scrFile.getName()+"-"+ i;
			File eachFile =new File(scrFile.getParent(),eachFilename);
			byte[] eachContent;
			if(i!=fileNumber-1)
				eachContent =Arrays.copyOfRange(fileConent, eachSize*i , eachSize);
			else
				eachContent =Arrays.copyOfRange(fileConent, eachSize*i , fileConent.length);
			try {
				FileOutputStream fos =new FileOutputStream(eachFile);
				fos.write(eachContent);
				fos.close();
				System.out.format("输出子文件%s,其大小是%d字节",eachFile.getAbsolutePath(),eachFile.length());
				
			}catch(IOException e) {
				e.printStackTrace();
			}
		}
	}
}
//合并,
package stream;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
 
import javax.security.auth.DestroyFailedException;
 
public class TestStream {
 
    public static void main(String[] args) {
        murgeFile("d:/", "eclipse.exe");
    }
 
    /**
     * 合并的思路,就是从eclipse.exe-0开始,读取到一个文件,就开始写出到 eclipse.exe中,直到没有文件可以读
     * @param folder
     *            需要合并的文件所处于的目录
     * @param fileName
     *            需要合并的文件的名称
     * @throws FileNotFoundException
     */
    private static void murgeFile(String folder, String fileName) {
 
        try {
            // 合并的目标文件
            File destFile = new File(folder, fileName);
            FileOutputStream fos = new FileOutputStream(destFile);
            int index = 0;
            while (true) {
                //子文件
                File eachFile = new File(folder, fileName + "-" + index++);
                //如果子文件不存在了就结束
                if (!eachFile.exists())
                    break;
 
                //读取子文件的内容
                FileInputStream fis = new FileInputStream(eachFile);
                byte[] eachContent = new byte[(int) eachFile.length()];
                fis.read(eachContent);
                fis.close();
                 
                //把子文件的内容写出去
                fos.write(eachContent);
                fos.flush();
                System.out.printf("把子文件 %s写出到目标文件中%n",eachFile);
            }
 
            fos.close();
            System.out.printf("最后目标文件的大小:%,d字节" , destFile.length());
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         
    }
 
}

 

以上是关于HOW2J Java 文件输入输出流,合并与拆分的主要内容,如果未能解决你的问题,请参考以下文章

JavaExp9:输入输出流与文件操作

JavaExp9:输入输出流与文件操作

输入流与输出流

java 合并流(SequenceInputStream)

Java面试题|列举常用字节输入流和输出流

Java学习笔记6.2.1 字符流 - 文件字符流与缓冲字符流