📄 fileos.java
字号:
import java.io.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.text.*;
import java.util.Arrays;
public class FileOs extends JFrame implements ActionListener {
JPanel jpFileChoose = new JPanel();
JPanel jpFileContral = new JPanel();
JButton jbOpen = new JButton("open");
JButton jbDivde = new JButton("divde");
JButton jbSum = new JButton("sum");
JTextField JTFileOpen = new JTextField(30);
JTextField JTFileSize = new JTextField(30);
public FileOs() {
super("文件分割器");
jpFileChoose.setLayout(new FlowLayout(FlowLayout.LEFT));
jpFileContral.setLayout(new FlowLayout(FlowLayout.LEFT));
jbOpen.addActionListener(this);
jbDivde.addActionListener(this);
jbSum.addActionListener(this);
jpFileChoose.add(JTFileOpen);
jpFileChoose.add(jbOpen);
jpFileContral.add(JTFileSize);
jpFileContral.add(jbDivde);
jpFileContral.add(jbSum);
add(jpFileChoose, BorderLayout.NORTH);
add(jpFileContral, BorderLayout.SOUTH);
pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args) {
new FileOs();
}
public void actionPerformed(ActionEvent e) {
String com = e.getActionCommand();
//打开文件************************************************************
if ("open".equals(com)) {
JOptionPane.showMessageDialog(this, "请选择一个要分割的文件,或者一个要合并文件的文件夹");
JFileChooser jfc = new JFileChooser("d:/");
jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
int i = jfc.showOpenDialog(this);
if (i == JFileChooser.APPROVE_OPTION) {
File tempf = jfc.getSelectedFile();
JTFileOpen.setText(tempf.getPath());
JTFileSize.setText("");
}
}
//分割文件**************************************************************
else if ("divde".equals(com)) {
JOptionPane.showMessageDialog(this, "请选择一个分割后文件存放的文件夹");
File f = new File(JTFileOpen.getText());
//文件不存在
if (!f.exists()) {
JOptionPane.showMessageDialog(this, "对不起,文件不存在");
} else {
//需要分割文件,选择的却是个文件夹
if (f.isDirectory()) {
JOptionPane.showMessageDialog(this,
"对不起,需要你选择一个分割的文件,而不是文件夹");
}
//选择了一个正确的分割文件
else {
//size文本框输入的是一个数字
if (textNum(JTFileSize)) {
JFileChooser jfc = new JFileChooser(f);
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int value = jfc.showOpenDialog(this);
if (value == JFileChooser.APPROVE_OPTION) {
try {
FileInputStream fis = new FileInputStream(f);
long maxSize = f.length();
long size = Long.parseLong(JTFileSize.getText());
long time = maxSize / size;
for (int i = 0; i <= time; i++) {
File backFile = new File(jfc.
getSelectedFile().getPath() + "/" +
f.getName() + "." + i + ".fos");
FileOutputStream fos = new FileOutputStream(
backFile);
size = Long.parseLong(JTFileSize.getText());
while (true) {
int buffer = 0; //缓冲区大小
byte[] b = null;
//设置缓冲大小,如果分割后的文件要小于1024字节的话,那么以分割后的
//文件大小为缓冲大小,否则以1024为缓冲区大小
if (size <= 1024l) {
buffer = (int) size;
} else {
buffer = 1024;
}
b = new byte[buffer];
int temp = fis.read(b);
//所有文件读取完毕
if (temp == -1) {
break;
}
fos.write(b, 0, temp);
//每读完一次后,再要读的数据长度减去缓冲区的长度
size -= (long) buffer;
//文件读取到达用户所要求的大小
if (size <= 0) {
break;
}
}
fos.close();
}
fis.close();
} catch (Exception ee) {
ee.printStackTrace();
}
JOptionPane.showMessageDialog(this, "文件分割完成!");
}
}
//size文本框里输入的不是一个数字
else {
JOptionPane.showMessageDialog(this,
"请用整数输入每个分割文件的大小,单位为字节");
}
}
}
}
//合并文件************************************************************************
else if ("sum".equals(com)) {
JOptionPane.showMessageDialog(this, "请选择一个存放分割后文件存放的文件夹");
File f = new File(JTFileOpen.getText());
//文件不存在
if (!f.exists()) {
JOptionPane.showMessageDialog(this, "对不起,文件夹不存在");
} else {
//需要分割文件,选择的却是个文件夹
if (!f.isDirectory()) {
JOptionPane.showMessageDialog(this, "对不起,你选择的不是一个文件夹");
} else {
File[] fileList = f.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
if (dir.isDirectory()) {
if (name.indexOf(".fos") != -1) {
return true;
}
}
return false;
}
});
System.out.println(fileList[0].getName());
if (fileList == null) {
JOptionPane.showMessageDialog(this,
"你选择的文件夹里不包含.fos文件,请重新选择");
} else {
JFileChooser jfc = new JFileChooser(f);
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int value = jfc.showOpenDialog(this);
if (value == JFileChooser.APPROVE_OPTION) {
Arrays.sort(fileList);
String fileName = fileList[0].getName().substring(0,
fileList[0].getName().indexOf("0.fos") -
1);
try {
FileOutputStream fos = new FileOutputStream(jfc.
getSelectedFile().getPath() + "/" +
fileName, true);
for (int i = 0; i < fileList.length; i++) {
FileInputStream fis = new FileInputStream(
fileList[i]);
while (true) {
byte[] b = new byte[1024];
int temp = fis.read(b);
if (temp == -1) {
break;
}
fos.write(b, 0, temp);
}
fis.close();
}
fos.close();
} catch (Exception eee) {
eee.printStackTrace();
}
JOptionPane.showMessageDialog(this, "文件合并完成");
}
}
}
}
}
}
//判断一个text里的内容是不是个数字
public boolean textNum(JTextComponent jtc) {
try {
Long.parseLong(jtc.getText());
} catch (Exception e) {
return false;
}
;
return true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -