public class splitAndunionJM {
public static void main(String[] args) throws Exception {
splitFile();
// untin();
}
public static void splitFile() throws Exception{
System.out.println("开始切割文件。。。");
File f = new File("F:\\0123\\文件合并与切割\\Merge/IMG2.jpg");
String splitTo = "F:\\0123\\文件合并与切割\\Split";
File to = new File(splitTo,"1.part");
long start = System.currentTimeMillis();
FileInputStream fis = new FileInputStream(f);
FileOutputStream fos = new FileOutputStream(to);
int num=1;
int len;
while ((len = fis.read())!=-1) {
len = len^3;//加密
fos.write(len);
if ((to.length())==(1024*1024)) {//1024*1024大小为1M
to = new File(splitTo,(++num)+".part");
fos = new FileOutputStream(to);
}
}
fis.close();
fos.close();
long end = System.currentTimeMillis();
System.out.println("文件切割成功!耗时:"+(end-start));
}
public static void untin() throws Exception{
System.out.println("开始合并文件。。。");
File dir = new File("F:\\0123\\文件合并与切割\\Split");
File mergeFile = new File("F:\\0123\\文件合并与切割\\Merge","合并.jpg");
FileOutputStream out = new FileOutputStream(mergeFile);
ArrayList<InputStream> list = new ArrayList<InputStream>();
long start = System.currentTimeMillis();
//将 文件夹下的所有文件关联字节输入流 然后 将输入流 添加到ArrayList集合中
File[] files = dir.listFiles();
InputStream ins = null;
for (File file : files) {
ins = new FileInputStream(file);
list.add(ins);
}
// ins.close();这里不可以关流 太早
System.out.println("一个有"+files.length+"个小文件。");
final Iterator<InputStream> it = list.iterator();
Enumeration<InputStream> e = new Enumeration<InputStream>(){
@Override
public boolean hasMoreElements() {
return it.hasNext();
}
@Override
public InputStream nextElement() {
return it.next();
}
};//语句的分号 不要漏掉
SequenceInputStream sin = new SequenceInputStream(e);
int len = 0;
while ((len = sin.read())!=-1) {
len = len^3;//解密
out.write(len);
}
out.close();
ins.close();
long end = System.currentTimeMillis();
System.out.println("合并成功!!耗时:"+(end-start));
}
}
转载于:https://blog.51cto.com/jiangzuun2014/1533163