package cn.itcast.io.p1.splitfile;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
/*
* 檔案切割器。
*
*
*
*
*/
public class SplitFileDemo {
private static final int SIZE = 1024 * 1024;
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
File file = new File("c:\\aa.mp3");
splitFile_2(file);
}
private static void splitFile_2(File file) throws IOException {
// 用讀取流關聯原始檔。
FileInputStream fis = new FileInputStream(file);
// 定義一個1M的緩衝區。
byte[] buf = new byte[SIZE];
// 建立目的。
FileOutputStream fos = null;
int len = 0;
int count = 1;
/*
* 切割檔案時,必須記錄住被切割檔案的名稱,以及切割出來碎片檔案的個數。 以方便於合併。
* 這個資訊為了進行描述,使用鍵值對的方式。用到了properties物件
*
*/
Properties prop = new Properties();
File dir = new File("c:\\partfiles");
if (!dir.exists())
dir.mkdirs();
while ((len = fis.read(buf)) != -1) {
fos = new FileOutputStream(new File(dir, (count++) + ".part"));
fos.write(buf, 0, len);
fos.close();
}
//將被切割檔案的資訊儲存到prop集合中。
prop.setProperty("partcount", count+"");
prop.setProperty("filename", file.getName());
fos = new FileOutputStream(new File(dir,count+".properties"));
//將prop集合中的資料儲存到檔案中。
prop.store(fos, "save file info");
fos.close();
fis.close();
}
public static void splitFile(File file) throws IOException {
// 用讀取流關聯原始檔。
FileInputStream fis = new FileInputStream(file);
// 定義一個1M的緩衝區。
byte[] buf = new byte[SIZE];
// 建立目的。
FileOutputStream fos = null;
int len = 0;
int count = 1;
File dir = new File("c:\\partfiles");
if (!dir.exists())
dir.mkdirs();
while ((len = fis.read(buf)) != -1) {
fos = new FileOutputStream(new File(dir, (count++) + ".part"));
fos.write(buf, 0, len);
}
fos.close();
fis.close();
}
}