使用java.io.*操作文件的拆分与合并,Application一例!

类别:Java 点击:0 评论:0 推荐:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import javax.swing.text.*;
import javax.swing.event.*;

public class Application1 extends JFrame {
String filepath="";
JLabel splitSourceSize,coalitionTotalSize,coalitionTotalCount;
JTextField SplitSource,SplitTotalCount,SplitEachSize,coalitionSource;
//*****************************************申明结束
public Application1() {
super("工具");
this.setSize(640,480);
this.setLocation(this.getToolkit().getScreenSize().width/2-this.getWidth()/2,this.getToolkit().getScreenSize().height/2-this.getHeight()/2);
JPanel contentPanel=(JPanel)this.getContentPane();
contentPanel.setLayout(new BorderLayout());
JTabbedPane jtp=new JTabbedPane();
jtp.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
JPanel splitPane=new JPanel(new GridLayout(5,1));
JPanel splitPane0=new JPanel(new BorderLayout());
splitPane0.add(splitPane,BorderLayout.NORTH);
JPanel splitPane1=new JPanel(new FlowLayout(FlowLayout.LEADING));
JPanel splitPane2=new JPanel(new FlowLayout(FlowLayout.LEADING));
JPanel splitPane3=new JPanel(new FlowLayout(FlowLayout.LEADING));
JPanel splitPane4=new JPanel(new FlowLayout(FlowLayout.LEADING));
JPanel splitPane5=new JPanel();
splitPane1.add(new JLabel("拆分源文件:"));
SplitSource=new JTextField(40);
splitPane1.add(SplitSource);
JButton SplitJButton=new JButton("浏览...");
SplitJButton.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    SplitJButtonClick(e);//选择要拆分的文件
  }
});
splitPane1.add(SplitJButton);
splitSourceSize=new JLabel("源文件大小:");
splitPane2.add(splitSourceSize);
splitPane3.add(new JLabel("拆分的数目:"));
SplitTotalCount=new JTextField(15);
SplitTotalCount.setDocument(new NumberDocument());//限制输入框只能输入数字
SplitTotalCount.getDocument().addDocumentListener(new DocumentListener() {//给输入框添加事件
  public void changedUpdate(DocumentEvent e) {
    if(!Application1.this.SplitTotalCount.isFocusOwner())return;
    try{SplitTotalCount_changedUpdate(e);}catch(Exception ex){System.err.println(ex.toString());}
  }
  public void insertUpdate(DocumentEvent e) {
    if(!Application1.this.SplitTotalCount.isFocusOwner())return;
    try{SplitTotalCount_changedUpdate(e);}catch(Exception ex){System.err.println(ex.toString());}
  }
  public void removeUpdate(DocumentEvent e) {
    if(!Application1.this.SplitTotalCount.isFocusOwner())return;
    try{SplitTotalCount_changedUpdate(e);}catch(Exception ex){System.err.println(ex.toString());}
  }
});
splitPane3.add(SplitTotalCount);
splitPane4.add(new JLabel("单文件大小:"));
SplitEachSize=new JTextField(15);
SplitEachSize.setDocument(new NumberDocument());//限制输入框只能输入数字
SplitEachSize.getDocument().addDocumentListener(new DocumentListener() {//给输入框添加事件
  public void changedUpdate(DocumentEvent e) {
    if(!Application1.this.SplitEachSize.isFocusOwner())return;
    try{SplitEachSize_changedUpdate(e);}catch(Exception ex){System.err.println(ex.toString());}
  }
  public void insertUpdate(DocumentEvent e) {
    if(!Application1.this.SplitEachSize.isFocusOwner())return;
    try{SplitEachSize_changedUpdate(e);}catch(Exception ex){System.err.println(ex.toString());}
  }
  public void removeUpdate(DocumentEvent e) {
    if(!Application1.this.SplitEachSize.isFocusOwner())return;
    try{SplitEachSize_changedUpdate(e);}catch(Exception ex){System.err.println(ex.toString());}
  }
});
splitPane4.add(SplitEachSize);
JButton SplitJB=new JButton("开始拆分");
SplitJB.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    try{SplitJBClick(e);}catch(Exception ex){System.err.println(ex.toString());}//拆分文件
  }
});
splitPane5.add(SplitJB);
splitPane.add(splitPane1);
splitPane.add(splitPane2);
splitPane.add(splitPane3);
splitPane.add(splitPane4);
splitPane.add(splitPane5);
JPanel coalitionPane0=new JPanel(new BorderLayout());
JPanel coalitionPane=new JPanel(new GridLayout(4,1));
coalitionPane0.add(coalitionPane,BorderLayout.NORTH);
JPanel coalitionPane1=new JPanel(new FlowLayout(FlowLayout.LEADING));
JPanel coalitionPane2=new JPanel(new FlowLayout(FlowLayout.LEADING));
JPanel coalitionPane3=new JPanel(new FlowLayout(FlowLayout.LEADING));
JPanel coalitionPane4=new JPanel();
coalitionPane1.add(new JLabel("合并首文件:"));
coalitionSource=new JTextField(40);
coalitionPane1.add(coalitionSource);
JButton coalitionJButton=new JButton("浏览(*.000)");
coalitionJButton.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    coalitionJButtonClick(e);//选择要合并的首文件
  }
});
coalitionPane1.add(coalitionJButton);
coalitionPane.add(coalitionPane1);
coalitionTotalSize=new JLabel("文件总大小:");
coalitionPane2.add(coalitionTotalSize);
coalitionPane.add(coalitionPane2);
coalitionTotalCount=new JLabel("文件总数目:");
coalitionPane3.add(coalitionTotalCount);
coalitionPane.add(coalitionPane3);
JButton coalitionJB=new JButton("开始合并");
coalitionJB.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    try{coalitionJBClick(e);}catch(Exception ex){System.err.println(ex.toString());}//合并文件
  }
});
coalitionPane4.add(coalitionJB);
coalitionPane.add(coalitionPane4);
jtp.add("拆分文件",splitPane0);
jtp.add("合并文件",coalitionPane0);
contentPanel.add(jtp,BorderLayout.CENTER);
this.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);//当关闭窗口时退出系统
      }
});
this.setVisible(true);
//********************************************以上为图形界面设计
}

private void SplitJBClick(ActionEvent e) throws Exception {//拆分文件操作
  File file=new File(this.SplitSource.getText());
  if(!file.exists()) {
    JOptionPane.showMessageDialog(this,"源文件不存在!","警告",JOptionPane.WARNING_MESSAGE);
    return;
  }
  javax.swing.JFileChooser fjc;
  fjc=new javax.swing.JFileChooser(filepath);
  fjc.removeChoosableFileFilter(fjc.getAcceptAllFileFilter());
  fjc.setDialogTitle("选择保存目录");
  fjc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
  if(fjc.APPROVE_OPTION!=fjc.showOpenDialog(this))return;
  filepath=fjc.getSelectedFile().getPath();
  byte[] b=new byte[1024];
  int read=0;
  String splitfilename=file.getName();
  int eachfilesize=Integer.parseInt(this.SplitEachSize.getText());
  FileInputStream fis=new FileInputStream(file);
  FileOutputStream fos;
  String savesplitfilename="";
  for(long splitcount=0;splitcount<Long.parseLong(this.SplitTotalCount.getText());splitcount++) {
    savesplitfilename=fjc.getSelectedFile()+"/"+splitfilename+".xiruo.";
    if(String.valueOf(splitcount).length()==1)
      savesplitfilename+="00"+splitcount;
    else if(String.valueOf(splitcount).length()==2)
      savesplitfilename+="0"+splitcount;
    else
      savesplitfilename+=splitcount;
    fos=new FileOutputStream(savesplitfilename);
    int eachread=b.length;
    int hasread=0;
    while((read=fis.read(b,0,eachread))>0) {
      fos.write(b,0,read);
      fos.flush();
      hasread+=read;
      if(hasread>=eachfilesize&&splitcount!=Long.parseLong(this.SplitTotalCount.getText())-1)
        break;
      if(eachfilesize-hasread<(long)b.length)
        eachread=eachfilesize-hasread;
    }
    fos.close();
  }
  fos=null;
  JOptionPane.showMessageDialog(this,"拆分完成");
}

private void coalitionJBClick(ActionEvent e) throws Exception {//合并文件操作
  File file=new File(this.coalitionSource.getText());
  if(!file.exists()) {
    JOptionPane.showMessageDialog(this,"源文件不存在!","警告",JOptionPane.WARNING_MESSAGE);
    return;
  }
  javax.swing.JFileChooser fjc;
  fjc=new javax.swing.JFileChooser(filepath);
  fjc.setDialogTitle("选择保存目录");
  fjc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
  if(fjc.APPROVE_OPTION!=fjc.showOpenDialog(this))return;
  filepath=fjc.getSelectedFile().getPath();
  String selfilename=file.getName();
  selfilename=selfilename.substring(0,selfilename.lastIndexOf("."));
  String savefile=fjc.getSelectedFile().getAbsolutePath()+"/"+selfilename.substring(0,selfilename.lastIndexOf("."));
  if(new File(savefile).exists()) {
    int javaok=JOptionPane.showConfirmDialog(this,"文件名 "+new File(savefile).getName()+" 的文件已经存在,你要覆盖原来的文件吗?","警告!",JOptionPane.OK_CANCEL_OPTION);
      if(javaok==JOptionPane.CANCEL_OPTION)return;
  }
  byte[] b=new byte[1024];
  int read=0;
  FileOutputStream fos=new FileOutputStream(savefile);
  FileInputStream fis;
  File[] f=file.getParentFile().listFiles();
  for(int i=0;i<f.length;i++) {
    if(!f[i].getName().startsWith(selfilename))continue;
    fis=new FileInputStream(f[i]);
    while((read=fis.read(b,0,b.length))>0) {
      fos.write(b, 0, read);
      fos.flush();
    }
    fis.close();
  }
  fos.close();
  fos=null;
  fis=null;
  JOptionPane.showMessageDialog(this,"合并完成");
}

private void SplitTotalCount_changedUpdate(DocumentEvent e) throws Exception {
  File file=new File(this.SplitSource.getText());
  if(!file.exists()||this.SplitTotalCount.getText().equals(""))return;
  long l=Long.parseLong(this.SplitTotalCount.getText());
  if(l<=0)return;
  this.SplitEachSize.setText(String.valueOf(file.length()/l));
}

private void SplitEachSize_changedUpdate(DocumentEvent e) throws Exception {
  File file=new File(this.SplitSource.getText());
  if(!file.exists()||this.SplitEachSize.getText().equals(""))return;
  double l=Double.parseDouble(this.SplitEachSize.getText());
  if(l<=0)return;
  this.SplitTotalCount.setText(fileCount((double)file.length(),l));
}

private void SplitJButtonClick(ActionEvent e) {//选择要拆分的源文件
  javax.swing.JFileChooser fjc;
  fjc=new javax.swing.JFileChooser(filepath);
  fjc.addChoosableFileFilter(new myFilter("*.jpg,*.gif","jpg,gif Files(*.jpg,*.gif)"));//文件过滤
  fjc.addChoosableFileFilter(new myFilter("*.rm,*.rmvb","real Files(*.rm,*.rmvb)"));//文件过滤
  fjc.addChoosableFileFilter(new myFilter("*.mpg,*.mpeg","mpg Files(*.mpg,*.mpeg)"));//文件过滤
  fjc.addChoosableFileFilter(fjc.getAcceptAllFileFilter());
  if(fjc.APPROVE_OPTION!=fjc.showOpenDialog(this))return;
  filepath=fjc.getSelectedFile().getPath();
  File file=fjc.getSelectedFile();
  double filesize=file.length();
  String size="";
  java.text.DecimalFormat df=new java.text.DecimalFormat("#.##");
  if(filesize>=1024d*1024d*0.8d)
    size=df.format(filesize/(1024d*1024d))+"MB";
  else if(filesize>=1024d*0.8d)
    size=df.format(filesize/1024d)+"KB";
  else
    size=filesize+"Bytes";
  this.splitSourceSize.setText("源文件大小: "+size);
  this.SplitSource.setText(file.getAbsolutePath());
  this.SplitTotalCount.setText(fileCount(filesize,102400));
  this.SplitEachSize.setText("102400");
}

private void coalitionJButtonClick(ActionEvent e) {//选择要合并的首文件
  javax.swing.JFileChooser fjc;
  fjc=new javax.swing.JFileChooser(filepath);
  fjc.removeChoosableFileFilter(fjc.getAcceptAllFileFilter());//移除默认的select All
  fjc.addChoosableFileFilter(new myFilter("*.xiruo.000","拆分首文件(*.xiruo.000)"));//文件过滤
  if(fjc.APPROVE_OPTION!=fjc.showOpenDialog(this))return;
  filepath=fjc.getSelectedFile().getPath();
  File file=fjc.getSelectedFile();
  String selfilename=file.getName();
  this.coalitionSource.setText(file.getAbsolutePath());
  selfilename=selfilename.substring(0,selfilename.lastIndexOf("."));
  File[] f=file.getParentFile().listFiles();
  double filesize=0;
  int filetotalcount= 0;
  for(int i=0;i<f.length;i++) {
    if(!f[i].getName().startsWith(selfilename))continue;
    filetotalcount++;
    filesize+=f[i].length();
  }
  String size="";
  java.text.DecimalFormat df=new java.text.DecimalFormat("#.##");
  if(filesize>=1024d*1024d*0.8d)
    size=df.format(filesize/(1024d*1024d))+"MB";
  else if(filesize>=1024d*0.8d)
    size=df.format(filesize/1024d)+"KB";
  else
    size=filesize+"Bytes";
  this.coalitionTotalSize.setText("文件总大小: "+size);
  this.coalitionTotalCount.setText("文件总数目: "+filetotalcount);
}

private String fileCount(double filesize,double eachsize) {
int i=(int)(filesize/eachsize)+(filesize%eachsize>0?1:0);
return String.valueOf(i);
}

public class NumberDocument extends PlainDocument {//对文本框的输入进行输入限制,构造PlainDocument实现
  public void insertString(int offs, String str, AttributeSet a)
  throws BadLocationException {
    char[] source = str.toCharArray();
    char[] result = new char[source.length];
    int j = 0;
    for (int i = 0; i < result.length; i++) {
      if (Character.isDigit(source[i]))
        result[j++] = source[i];
    }
    super.insertString(offs, new String(result, 0, j), a);
  }
}
public static void main(String args[]) throws Exception {
  Font font=new Font("宋体",Font.PLAIN,15);
  UIManager.put("Button.font",font);
  UIManager.put("ToggleButton.font",font);
  UIManager.put("RadioButton.font",font);
  UIManager.put("CheckBox.font",font);
  UIManager.put("ColorChooser.font",font);
  UIManager.put("ToggleButton.font",font);
  UIManager.put("ComboBox.font",font);
  UIManager.put("ComboBoxItem.font",font);
  UIManager.put("InternalFrame.titleFont",font);
  UIManager.put("Label.font",font);
  UIManager.put("List.font",font);
  UIManager.put("MenuBar.font",font);
  UIManager.put("Menu.font",font);
  UIManager.put("MenuItem.font",font);
  UIManager.put("RadioButtonMenuItem.font",font);
  UIManager.put("CheckBoxMenuItem.font",font);
  UIManager.put("PopupMenu.font",font);
  UIManager.put("OptionPane.font",font);
  UIManager.put("Panel.font",font);
  UIManager.put("ProgressBar.font",font);
  UIManager.put("ScrollPane.font",font);
  UIManager.put("Viewport",font);
  UIManager.put("TabbedPane.font",font);
  UIManager.put("TableHeader.font",font);
  UIManager.put("TextField.font",font);
  UIManager.put("PasswordFiled.font",font);
  UIManager.put("TextArea.font",font);
  UIManager.put("TextPane.font",font);
  UIManager.put("EditorPane.font",font);
  UIManager.put("TitledBorder.font",font);
  UIManager.put("ToolBar.font",font);
  UIManager.put("ToolTip.font",font);
  UIManager.put("Tree.font",font);//以上设置是为了解决中文问题
  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());//设置可视风格
  new Application1();
}
}
//************************************************文件选择过滤器
class myFilter extends javax.swing.filechooser.FileFilter {
String extension="",description="";
public myFilter(String extension,String description) {
if(extension!=null)this.extension=extension;
if(description!=null)this.description=description;
}

public String getDescription() {
return this.description;
}

public boolean accept(File file) {
if(file.isDirectory()||extension.equals(""))
      return true;
String[] s=extension.replaceAll("[*]","").split("[,]");
for(int i=0;i<s.length;i++) {
      if(file.getName().toLowerCase().endsWith(s[i].toLowerCase())) {
        return true;
      }
}
return false;
}
}

本文地址:http://com.8s8s.com/it/it17911.htm