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 文件输入输出流,合并与拆分的主要内容,如果未能解决你的问题,请参考以下文章