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; } }  
 
  |