Android合併檔案的3種方式
下面介紹合併檔案的幾種方式,並通過合併amr檔案來舉例介紹合併檔案的具體流程。amr格式的檔案頭是6位元組,所以在進行檔案合併的時候要減去除第一個檔案以外的其他檔案的檔案頭。
注意:不同檔案的檔案頭是不一樣的,所以在合併的時候根據不同檔案相應的減去合併檔案的檔案頭。
步驟一:獲取要合併的檔案及建立合併後儲存的檔案
/**用於存放要合併的檔案的集合**/
List<File>tempFiles=new ArrayList<File>();
/**合併之後的檔案**/
File finalFile;/**
* 建立用於合併之後的檔案
* @param isTempFile 是否為臨時檔案
* @return soundFile File
* */
private File getFile(boolean isTempFile) {
// TODO Auto-generated method stub
finalFile=null;
if (!Environment.getExternalStorageState().
equals(Environment.MEDIA_MOUNTED)) {
Log.w(“Waring”, “檢測到你的手機沒有插入SD卡,請插入SD後再試!”);
}
//獲取系統的24小時制時間作為檔名(HH為24小時制,hh為12小時制)
SimpleDateFormat simpleDateFormat=new SimpleDateFormat(
“yyyy-MM-dd-HH-mm-ss”,Locale.getDefault());
String fileName=simpleDateFormat.format(new Date())+”.amr”;
if (isTempFile) {//如果是臨時檔案
fileName=”temp”+fileName;
}
try {
File parentFile= new File(Environment.getExternalStorageDirectory()
.getCanonicalFile()+”/”+”Recorder”);
if (!parentFile.exists()||parentFile==null) {//如果目錄不存在
parentFile.mkdirs();//建立parentFile目錄
}
finalFile=new File(parentFile, fileName);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return finalFile;
}
步驟二:合併檔案
方式一: 通過FileOutputStream、與FileInputStream方式
/**
* 通過FileOutputStream、與FileInputStream方式
* 將多個檔案進行合併,並刪除原檔案
* */
public void mergeFiles1() {
// TODO Auto-generated method stub
if (tempFiles.isEmpty()) return;//如果還沒錄製則,不進行合併
File realFile=getFile(false);
try {
FileOutputStream fos=new FileOutputStream(realFile);
for (int i = 0; i < tempFiles.size(); i++) {//遍歷tempFiles集合,合併所有臨時檔案
FileInputStream fis=new FileInputStream(tempFiles.get(i));
byte[] tmpBytes = new byte[fis.available()];
int length = tmpBytes.length;//檔案長度
//標頭檔案
if(i==0){
while(fis.read(tmpBytes)!=-1){
fos.write(tmpBytes,0,length);
}
}
//之後的檔案,去掉標頭檔案就可以了.amr格式的檔案的頭資訊為 6位元組
else{
while(fis.read(tmpBytes)!=-1){
fos.write(tmpBytes,6,length-6);
}
}
fos.flush();
fis.close();
}
fos.close();//所有的檔案合併結束,關閉輸出流
Log.i(“info”, “此次錄音檔案:”+realFile.getName()+” 已儲存到:”+
realFile.getAbsolutePath()+”目錄下”);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//刪除合併過的臨時檔案
for (File file:tempFiles) {
if (file.exists()) {
file.delete();
}
}
}
方式二: 通過FileChannel方式
/**
* 通過FileChannel方式
* */
public void mergeFiles2() {
File realFile=getFile(false);
FileChannel mFileChannel;
try {
FileOutputStream fos=new FileOutputStream(realFile);
mFileChannel=fos.getChannel();
FileChannel inFileChannel;
for(File file:tempFiles){
inFileChannel=new FileInputStream(file).getChannel();
//下面應該根據不同檔案減去相應的檔案頭(這裡沒有剪去檔案頭,實際應用中應當減去)
inFileChannel.transferTo(0, inFileChannel.size(), mFileChannel);
inFileChannel.close();
}
fos.close();
mFileChannel.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
方式三:通過RandomAccessFile方式
/**
* 通過RandomAccessFile方式
* */
public void mergeFiles3() {
try{
File realFile=getFile(false);
FileOutputStream fos = new FileOutputStream(realFile);
RandomAccessFile ra = null;
for (int i = 0; i < tempFiles.size(); i++) {
ra = new RandomAccessFile(tempFiles.get(i), “r”);
if (i != 0) {
ra.seek(6);//跳過amr檔案的檔案頭
}
byte[] buffer = new byte[1024 * 8];
int len = 0;
while ((len = ra.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
}
ra.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
相關文章
- 合併PDF檔案怎樣做?分享兩種PDF合併方法
- Python合併字典的七種方式!Python
- php合併陣列的幾種方式PHP陣列
- windows合併檔案Windows
- 合併iso檔案
- git合併分支,如果選擇性的合併檔案?Git
- Hive小檔案合併Hive
- 【詳細】關於Android上傳檔案的幾種方式Android
- Linux下合併檔案Linux
- 三種引入javascript檔案的方式JavaScript
- 檔案上傳的幾種方式
- 多個excel檔案合併成一個excel表的方法 如何快速合併多個excel檔案Excel
- Tux3檔案系統有望合併到Linux KernelLinux
- java快速分割及合併檔案Java
- 資料檔案合併與拆分
- shell 檔案合併 去重 分割
- 檔案切割以及合併筆記筆記
- Python之合併PDF檔案Python
- Linux大檔案的切割與合併Linux
- 超級檔案分割《合併》機(分割大檔案)
- Python3 列表list合併的4種方法Python
- JavaScript~檔案下載的幾種方式JavaScript
- php讀取檔案的幾種方式PHP
- vue引用js檔案的多種方式VueJS
- Java檔案下載的幾種方式Java
- Java多種寫檔案方式Java
- PDF多檔案合併怎麼完成?PDF合併的簡單方法分享
- 辦公自動化:PDF檔案合併器,將多個PDF檔案進行合併
- Mac如何使用預覽應用合併PDF檔案 Mac合併PDF檔案教程詳解Mac
- 一款免費使用的PDF檔案批次合併工具,可操作pdf檔案順序,按順序合併pdf檔案。
- 一款免費使用的PDF檔案批量合併工具,可操作pdf檔案順序,按順序合併pdf檔案。
- 多個 EXCEL 檔案如何合併成一個檔案Excel
- vue3使用ElementPlus upload上傳檔案的兩種方式Vue
- Linux - 檔案的分割(split)與合併(cat)Linux
- linux下檔案的切割與合併(轉)Linux
- linux檔案合併、去重、拆分Linux
- Python合併多個csv檔案Python
- 簡談檔案下載的三種方式