📄 applicationfileoperator.java
字号:
package mircoenorde.FileOperator;
//package fileoperator;
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 ApplicationFileOperator extends JDialog {
String filepath = "";
JLabel splitSourceSize, coalitionTotalSize, coalitionTotalCount;
JTextField SplitSource, SplitTotalCount, SplitEachSize, coalitionSource;
//*****************************************申明结束
public ApplicationFileOperator(JFrame frame, String title, boolean modal) {
super(frame, title, modal);
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(20);
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 (!ApplicationFileOperator.this.SplitTotalCount.isFocusOwner()) {
return;
}
try {
SplitTotalCount_changedUpdate(e);
} catch (Exception ex) {
System.err.println(ex.toString());
}
}
public void insertUpdate(DocumentEvent e) {
if (!ApplicationFileOperator.this.SplitTotalCount.isFocusOwner()) {
return;
}
try {
SplitTotalCount_changedUpdate(e);
} catch (Exception ex) {
System.err.println(ex.toString());
}
}
public void removeUpdate(DocumentEvent e) {
if (!ApplicationFileOperator.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 (!ApplicationFileOperator.this.SplitEachSize.isFocusOwner()) {
return;
}
try {
SplitEachSize_changedUpdate(e);
} catch (Exception ex) {
System.err.println(ex.toString());
}
}
public void insertUpdate(DocumentEvent e) {
if (!ApplicationFileOperator.this.SplitEachSize.isFocusOwner()) {
return;
}
try {
SplitEachSize_changedUpdate(e);
} catch (Exception ex) {
System.err.println(ex.toString());
}
}
public void removeUpdate(DocumentEvent e) {
if (!ApplicationFileOperator.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(20);
coalitionPane1.add(coalitionSource);
JButton coalitionJButton = new JButton("浏览");
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) {
dispose(); //当关闭窗口时退出系统
}
});
//this.setVisible(true);
//********************************************以上为图形界面设计
}
private void SplitJBClick(ActionEvent e) throws Exception { //拆分文件操作
File file = new File(this.SplitSource.getText());
if (!file.exists()) {
JOptionPane.showMessageDialog(this, "源文件不存在!", "error",
JOptionPane.ERROR_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 +
".";
if (String.valueOf(splitcount).length() == 1) {
savesplitfilename += "00" + splitcount +
".others";
} else if (String.valueOf(splitcount).length() == 2) {
savesplitfilename += "0" + splitcount +
".others";
} else {
savesplitfilename += splitcount +
".others";
}
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, "源文件不存在!", "error",
JOptionPane.ERROR_MESSAGE);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -