java實(shí)現(xiàn)文件切片和合并的代碼示例
最近在學(xué)習(xí)大數(shù)據(jù)相關(guān)的知識(shí)點(diǎn),其中需要實(shí)現(xiàn)文件的切片和合并,完整的java實(shí)現(xiàn)代碼,以下貼出個(gè)人代碼,僅供參考
首先建一個(gè)SplitUtil工具類,在工具類中有三個(gè)方法getSplitFile,getWrite,merge
1,文件拆分代碼
public static void getSplitFile(String file,int count){
//預(yù)分配文件所占用的磁盤空間,在磁盤創(chuàng)建一個(gè)指定大小的文件,“r”表示只讀,“rw”支持隨機(jī)讀寫
try {
RandomAccessFile raf = new RandomAccessFile(new File(file), "r");
//計(jì)算文件大小
long length = raf.length();
System.out.println(length);
//計(jì)算文件切片后每一份文件的大小
long maxSize = length / count;
System.out.println(maxSize);
long offset = 0L;//定義初始文件的偏移量(讀取進(jìn)度)
//開始切割文件
for(int i = 0; i < count - 1; i++){ //count-1最后一份文件不處理
//標(biāo)記初始化
long fbegin = offset;
//分割第幾份文件
long fend = (i+1) * maxSize;
//寫入文件
offset = getWrite(file, i, fbegin, fend);
}
//剩余部分文件寫入到最后一份(如果不能平平均分配的時(shí)候)
if (length - offset > 0) {
//寫入文件
getWrite(file, count-1, offset, length);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2,getWrite文件寫入代碼
/**
* 指定文件每一份的邊界,寫入不同文件中
* @param file 源文件
* @param index 源文件的順序標(biāo)識(shí)
* @param begin開始指針的位置
* @param end 結(jié)束指針的位置
* @return long
*/
public static long getWrite(String file,int index,long begin,long end){
long endPointer = 0L;
try {
//申明文件切割后的文件磁盤
RandomAccessFile in = new RandomAccessFile(new File(file), "r");
//定義一個(gè)可讀,可寫的文件并且后綴名為.tmp的二進(jìn)制文件
RandomAccessFile out = new RandomAccessFile(new File(file + "_" + index + ".tmp"), "rw");
//申明具體每一文件的字節(jié)數(shù)組
byte[] b = new byte[1024];
int n = 0;
//從指定位置讀取文件字節(jié)流
in.seek(begin);
//判斷文件流讀取的邊界
while(in.getFilePointer() <= end && (n = in.read(b)) != -1){
//從指定每一份文件的范圍,寫入不同的文件
out.write(b, 0, n);
}
//定義當(dāng)前讀取文件的指針
endPointer = in.getFilePointer();
//關(guān)閉輸入流
in.close();
//關(guān)閉輸出流
out.close();
} catch (Exception e) {
e.printStackTrace();
}
return endPointer;
}
3.文件合并代碼
/**
* 文件合并
* @param file 指定合并文件
* @param tempFile 分割前的文件名
* @param tempCount 文件個(gè)數(shù)
*/
public static void merge(String file,String tempFile,int tempCount){
RandomAccessFile raf = null;
try {
//申明隨機(jī)讀取文件RandomAccessFile
raf = new RandomAccessFile(new File(file), "rw");
//開始合并文件,對應(yīng)切片的二進(jìn)制文件
for (int i = 0; i < tempCount; i++) {
//讀取切片文件
RandomAccessFile reader = new RandomAccessFile(new File(tempFile + "_" + i + ".tmp"), "r");
byte[] b = new byte[1024];
int n = 0;
while((n = reader.read(b)) != -1){
raf.write(b, 0, n);//一邊讀,一邊寫
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
最后在主程序里面調(diào)用就可以了
public static void main(String[] args) {
String file = "F:\\java-study\\img\\mv.jpg";
int count = 5;
//1.根據(jù)現(xiàn)有的文件編寫文件編寫文件切片工具類
//2.寫入到二進(jìn)制臨時(shí)文件
// getSplitFile(file, count);
//3.根據(jù)實(shí)際的需求合并指定數(shù)量的文件
String tempFile = "F:\\java-study\\img\\img.jpg";
merge(file, tempFile, 5);
}
以上代碼可實(shí)現(xiàn)圖片,文檔,mp3,mp4等文件的拆分與合并,下面是圖片切片和拆分的效果圖

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java實(shí)現(xiàn)大文件的切割與合并操作示例
- java 流操作對文件的分割和合并的實(shí)例詳解
- Java實(shí)現(xiàn)文件分割和文件合并實(shí)例
- java 實(shí)現(xiàn)切割文件和合并文件的功能
- Java將文件分割為多個(gè)子文件再將子文件合并成原始文件的示例
- Java 使用IO流實(shí)現(xiàn)大文件的分割與合并實(shí)例詳解
- java實(shí)現(xiàn)合并2個(gè)文件中的內(nèi)容到新文件中
- java文件操作工具類實(shí)現(xiàn)復(fù)制文件和文件合并
- java實(shí)現(xiàn)大文件分割與合并的實(shí)例代碼
- java合并多個(gè)文件的兩種方法
相關(guān)文章
Java的鎖機(jī)制:synchronized和CAS詳解
這篇文章主要介紹了Java的鎖機(jī)制synchronized和CAS詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-09-09
javaSE基礎(chǔ)如何通俗的理解javaBean是什么
所謂的Java Bean,就是一個(gè)java類,編譯后成為了一個(gè)后綴名是 .class的文件。這就是Java Bean,很多初學(xué)者,包括當(dāng)年的我自己,總是被這些專有名詞搞的暈頭轉(zhuǎn)向2021-10-10
使用Spring Cloud Feign遠(yuǎn)程調(diào)用的方法示例
這篇文章主要介紹了使用Spring Cloud Feign遠(yuǎn)程調(diào)用的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09
Spring boot2X Consul如何通過RestTemplate實(shí)現(xiàn)服務(wù)調(diào)用
這篇文章主要介紹了spring boot2X Consul如何通過RestTemplate實(shí)現(xiàn)服務(wù)調(diào)用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
Java使用JSONObject需要的6個(gè)jar包下載地址
這篇文章主要介紹了Java使用JSONObject需要的6個(gè)jar包下載地址,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Apache Commons fileUpload實(shí)現(xiàn)文件上傳之一
這篇文章主要介紹了Apache Commons fileUpload實(shí)現(xiàn)文件上傳之一的相關(guān)資料,需要的朋友可以參考下2016-03-03

