超級檔案分割《合併》機(分割大檔案)
需求:現在檔案的大小越來越大,很多移動裝置無法一次把檔案一次全部拷貝完全,這種情況就需要把檔案分割小點,分幾次傳送,然後,合併起來,這樣就實現了大檔案的拷貝功能
介紹:我的這個用的是吧檔案分割成1M大小的檔案,當然,可以改成很大的容量,這個只要改變下就行了。合併也可以的。
package cn.hncu.IO;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class GraphFileSplit extends JFrame implements ActionListener{
JButton btnsplit,btnmerge;
String filename;
static JTextField tf;
public GraphFileSplit(){
setTitle("檔案分割器");
this.setLayout(new FlowLayout());//採用流佈局方式
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setBounds(100, 100,400, 500);//設定邊界
JLabel lb=new JLabel("請選擇型別");//標籤
btnsplit= new JButton("分割檔案");
btnmerge=new JButton("合併檔案");//按鈕
btnsplit.addActionListener(this);
JLabel lb2=new JLabel("檔案分割後存放在當前目錄下的“Split”\r\n");
JLabel lb3=new JLabel("請注意: 檔案合併後的檔案存放在你電腦E盤的的ex目錄下\r\n");
tf=new JTextField(30);
//新增元件
btnmerge.addActionListener(this);
this.getContentPane().add(lb);
this.getContentPane().add(btnsplit);
this.getContentPane().add(btnmerge);
this.getContentPane().add(lb2);
this.getContentPane().add(lb3);
this.getContentPane().add(tf);
this.setResizable(false);
this.setVisible(true);
}
public static void main(String[] args) {
new GraphFileSplit(); //主函式,new 物件
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==btnsplit){//對分割按鈕進行監聽
JFileChooser jf=new JFileChooser();//檔案選擇器
int resout=jf.showOpenDialog(null);
if(resout==JFileChooser.APPROVE_OPTION){
File file=jf.getSelectedFile();
filename=file.getName();
// System.out.println(file.getAbsolutePath());//這樣包含有檔名;C:\Users\xinxin\Documents\Beyond - 光輝歲月.mp3
// System.out.println(file.getParent());//C:\Users\xinxin\Documents
// System.out.println(file.getName());//Beyond - 光輝歲月.mp3
// System.out.println(file);
File des=new File(file.getParent(),"fileSplit");//file.getParent()可以得到檔名之前的絕對路徑
try {
Split(file,des);
} catch (IOException e1) {
throw new RuntimeException("分割出現錯誤");
}
}
}
if(e.getSource()==btnmerge){
File[] file;//將選中的檔案有檔案陣列裝
JFileChooser jf=new JFileChooser();
jf.setMultiSelectionEnabled(true);
int resout=jf.showOpenDialog(null);
if(resout==JFileChooser.APPROVE_OPTION){
file =jf.getSelectedFiles();
if(file.length==0){
throw new RuntimeException("檔案不存在");
}
try {
merge(file,filename);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
private void merge(File[] file,String filename) throws IOException {//合併的時候用到合併流
ArrayList<FileInputStream> alist=new ArrayList<FileInputStream>();
for(int i=0;i<file.length;i++){
// System.out.println(file[i].getParent());//分割後輸出檔案路徑
alist.add(new FileInputStream(new File( file[i].getParent(),file[i].getName())));
}
Enumeration<FileInputStream> en =Collections.enumeration(alist);
SequenceInputStream se =new SequenceInputStream(en);
String paht="e:\\ex\\";//只能合併後的儲存路徑,告訴使用者路徑
File file0=new File(paht);
if(!file0.exists()){
file0.mkdirs();//檔案不存在就建立一個
}
// System.out.println(filename+"11111111");
// System.out.println(file0+ filename+"fileoasdasdsasdas");
if(filename==null){
filename="split.txt";
}
FileOutputStream out =new FileOutputStream(file0+ "\\"+filename);
tf.setText("合併的檔案存放在"+file0+"\\"+filename);
int len =0;
byte []b=new byte[1024*1024];//開始合併
while((len=se.read(b))!=-1){
out.write(b, 0, len);
}
out.close();
se.close();
}
//分割核心程式碼
private static void Split(File file, File des) throws IOException {
FileInputStream in =new FileInputStream(file);//分割必須先讀進陣列,陣列空間開1M大小
FileOutputStream out=null;
int count=1;
if(!des.exists()){
des.mkdirs();
}
byte a[]=new byte[1024*1024];//大小為1M
int len=0;
while((len=in.read(a))!=-1){
String desrc=file.getName()+(count++);
File f=new File(des,desrc);
out =new FileOutputStream(f);
tf.setText("分割完成後,檔案放在"+f.getParent());
out.write(a,0,len);
out.close();
}
}
}
部分介面截圖
相關文章
- java快速分割及合併檔案Java
- shell 檔案合併 去重 分割
- linux下檔案分割與合併 (轉)Linux
- linux下檔案分割與合併(轉)Linux
- Linux檔案分割與合併:split&catLinux
- Linux - 檔案的分割(split)與合併(cat)Linux
- Pandas之EXCEL資料讀取/儲存/檔案分割/檔案合併Excel
- 在不刪除檔案的前提下合併硬碟分割槽硬碟
- Python批次分割Excel後逐行做差、合併檔案的方法PythonExcel
- 使用 7-Zip 進行檔案分割與合併(命令列示例)命令列
- 檔案分割器 (轉)
- linux下使用split 來分割大檔案Linux
- win10分割槽合併保留資料怎麼操作_win10硬碟合併分割槽並保留檔案詳細步驟Win10硬碟
- windows合併檔案Windows
- 合併iso檔案
- 用檔案新增Swap分割槽
- C#分割檔案內容C#
- Flink SQL FileSystem Connector 分割槽提交與自定義小檔案合併策略 SQL
- hive迷案之消失的分割槽檔案Hive
- 使用 split 命令分割 Linux 檔案Linux
- 命令列技巧:分割檔案內容命令列
- MP4檔案分割實現
- 用檔案作為Swap分割槽
- Hive小檔案合併Hive
- Linux系統下使用split命令分割大檔案.Linux
- Linux大檔案的切割與合併Linux
- Liunx 磁碟分割槽與檔案掛載
- Ext分割槽檔案恢復工具extundeletedelete
- Linux分割槽和檔案系統 ⑥Linux
- 不用swap分割槽,用交換檔案(轉)
- Linux下合併檔案Linux
- 多個 EXCEL 檔案如何合併成一個檔案Excel
- 在 Linux 中分割和重組檔案Linux
- PDF檔案進行線上分割如何去操作
- Centos檔案切割利器_split命令及cat命令合併檔案CentOS
- 資料檔案合併與拆分
- 檔案切割以及合併筆記筆記
- Python之合併PDF檔案Python