java IO流之檔案切割兩例(含Properties 用法)

劍握在手發表於2013-11-21

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();

 }

}

相關文章