import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.sql.Date;
import java.util.*;
import javax.swing.*;
import javax.swing.border.LineBorder;
public class FileCut extends JFrame implements Cloneable{
/*
* operateKind存储操作种类(分割或者合并文件) cutKind存储分割文件的方式
*/
public static int operateKind = 1, cutKind = 1;
// 加载框架顶部的图片由类MyCanvas实现
// 下部框架
private JPanel floor = new JPanel(new BorderLayout());
// 左部框架
private JPanel left = new JPanel(new GridLayout(2, 1, 10, 10));
private JPanel left_up = new JPanel(new GridLayout(3, 1));
private JLabel left_up_label = new JLabel(" -------功能选择-------");
private CheckboxGroup checkgroup_left = new CheckboxGroup();
private Checkbox split = new Checkbox("分割文件", true, checkgroup_left);
private Checkbox union = new Checkbox("合并文件", false, checkgroup_left);
private JTextArea left_down_label = new JTextArea(
" 欢迎使用\n文件分割※合并器1.0\n\n作者:陈 维\n地址:太原理工大学\n~成于2007年元月~");
// 右部框架
private JPanel right = new JPanel(new BorderLayout());
private JPanel right_up = new JPanel(new GridLayout());// 右上
public static JLabel cutMethod = new JLabel("分割方式: ");
public static CheckboxGroup checkgroup_right = new CheckboxGroup();
public static Checkbox bigOrSmall = new Checkbox(" 按大小", true,
checkgroup_right);
public static Checkbox fileNumber = new Checkbox(" 按数目", false,
checkgroup_right);
private JPanel right_mid = new JPanel(new BorderLayout());// 右中
public static JLabel JLabel1 = new JLabel("参 数:"),
JLabel2 = new JLabel("源 文 件:"), JLabel3 = new JLabel("目标目录:");
public static JTextField JTextField1 = new JTextField("2"),// 分割方式参数
JTextField2 = new JTextField(13),// 源文件路径及文件名
JTextField3 = new JTextField(13);// 分割后文件存放目录
public static JComboBox unit = new JComboBox();
private JButton calcu = new JButton("计 算"),// 调用计算器进行计算
browse_source = new JButton("浏 览"),// 浏览源文件
browse_target = new JButton("浏 览"),// 浏览分割后文件存放目录
clear = new JButton("重 置");// 所有参数重置
private JPanel right_down = new JPanel();// 右下
private JButton enter = new JButton("确 定"), cancel = new JButton("取 消");
static JTextArea message = new JTextArea(5, 20); // 信息提示
private JScrollPane jsp = new JScrollPane();
// 构造函数
public FileCut() {
super("文件分割※合并器1.0--chenwei_computer@163.com");
this.setIconImage(Toolkit.getDefaultToolkit().getImage("main.gif"));// 设置图标
Box box_main = Box.createVerticalBox();
// 顶部图片
box_main.add(new MyCanvas());
// 左部组件
left_up.setBorder(new LineBorder(new Color(8,57,108), 2));// 边框
left_up.add(left_up_label);
split.addItemListener(new SplitItemListener());
left_up.add(split);
union.addItemListener(new UnionItemListener());
left_up.add(union);
left_up.add(left_down_label);
left.add(left_up);
left_down_label.setBorder(new LineBorder(new Color(8,57,108), 2));// 边框
left_down_label.setEditable(false);
left_down_label.setBackground(left_up.getBackground());
left_down_label.setFont(new Font("宋体", Font.HANGING_BASELINE
+ Font.ITALIC, 13));
left.setBorder(new LineBorder(new Color(8,57,108), 2));
left.add(left_down_label);
floor.add(left, "West");
// 右部上组件
right.setBorder(BorderFactory.createEmptyBorder(1, 2, 1, 2));// 边框
right_up.add(cutMethod);
bigOrSmall.addItemListener(new BigOrSmallItemListener());
right_up.add(bigOrSmall);
fileNumber.addItemListener(new FileNumberItemListener());
right_up.add(fileNumber);
right.add(right_up, "North");
// 右部中组件
Box box = Box.createHorizontalBox(), box1 = Box.createVerticalBox(), box2 = Box
.createVerticalBox(), box3 = Box.createVerticalBox();
box1.add(JLabel1);
box1.add(Box.createVerticalStrut(9));// 添加垂直间距
box1.add(JLabel2);
box1.add(Box.createVerticalStrut(9));
box1.add(JLabel3);
box2.add(JTextField1);
box2.add(JTextField2);
box2.add(JTextField3);
unit.insertItemAt("MB", 0);
unit.insertItemAt("KB", 1);
unit.insertItemAt("B", 2);
unit.setSelectedIndex(0);
box3.add(unit);
browse_source.addActionListener(new SourceActionListener());
box3.add(browse_source);
browse_target.addActionListener(new TargetActionListener());
box3.add(browse_target);
box.add(box1);
box.add(box2);
box.add(box3);
right_mid.add(box, "Center");
message.setEditable(false);// 设置为不可编辑
jsp.setBorder(BorderFactory.createEmptyBorder(1, 2, 1, 2));
jsp.getViewport().add(message);
message.setBackground(Color.LIGHT_GRAY);
right_mid.add(jsp, "South");
right.add(right_mid, "Center");
// 右部下组件
calcu.addActionListener(new CalcuAction());
right_down.add(calcu);
enter.addActionListener(new EnterAction());
right_down.add(enter);
cancel.addActionListener(new CancelAction());
right_down.add(cancel);
clear.addActionListener(new ClearAction());
right_down.add(clear);
right.add(right_down, "South");
floor.add(right, "Center");
// 整体下部组件
box_main.add(floor);
this.add(box_main);
// 设置可见性和窗体大小,窗口居中,添加关闭窗体事件监听
this.setVisible(true);
// this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
Toolkit tk = this.getToolkit();
Dimension de = tk.getScreenSize();
this.setBounds((de.width - this.getWidth()) / 2, (de.height - this
.getHeight()) / 2, this.getWidth(), this.getHeight()); // 使之居于屏幕正中央
this.setResizable(false);
this.addWindowListener(MyWindowListener.getInstance());
}
public static void main(String[] args) {
new FileCut();
}
}
class BrowseSourceFile implements ActionListener {
public void actionPerformed(ActionEvent e) {
try {
JFileChooser df = new JFileChooser("请选择要分割的文件:");
if (FileCut.operateKind == 1)
df.setFileSelectionMode(JFileChooser.FILES_ONLY);
if (FileCut.operateKind == 2)
df.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
df.showSaveDialog(new JPanel());
df.setVisible(true);
FileCut.JTextField2.setText(df.getSelectedFile().toString());
if (df.getSelectedFile().isDirectory()) {// 当为文件夹时
File[] aimFiles = df.getSelectedFile().listFiles();
String[] strFiles = new String[df.getSelectedFile().listFiles().length];
for (int i = 0; i < df.getSelectedFile().listFiles().length; i++)
strFiles[i] = aimFiles[i].getName();
FileCut.message.setText("文件夹名称:"
+ df.getSelectedFile().getName() + "\n子文件:\n");
for (int i = 0; i < df.getSelectedFile().listFiles().length; i++)
FileCut.message.append(strFiles[i] + "\n");
}
if (df.getSelectedFile().isFile()) {// 当为文件时
FileCut.message.setText("该目标是一个文件\n文件夹名称:\n"
+ df.getSelectedFile().getName() + "\n文件大小:"
+ df.getSelectedFile().length() + "Bytes\n"
+ new Date(df.getSelectedFile().lastModified()));
}
} catch (Exception ex) {
FileCut.message.setText("\n找不到指定文件或文件夹!");
}
}
}
class SplitItemListener implements ItemListener {
public void itemStateChanged(ItemEvent e) {
FileCut.operateKind = 1;
boolean bool = true;
FileCut.cutMethod.setEnabled(bool);
FileCut.JLabel1.setEnabled(bool);
FileCut.JLabel2.setText("源 文 件:");
FileCut.JLabel3.setText("目标目录:");
FileCut.bigOrSmall.setEnabled(bool);
FileCut.fileNumber.setEnabled(bool);
FileCut.JTextField1.setEnabled(bool);
FileCut.unit.setEnabled(bool);
}
}
class UnionItemListener implements ItemListener {
public void itemStateChanged(ItemEvent e) {
FileCut.operateKind = 2;
boolean bool = false;
FileCut.cutMethod.setEnabled(bool);
FileCut.JLabel1.setEnabled(bool);
文件分割器
需积分: 0 158 浏览量
更新于2008-08-06
收藏 39KB RAR 举报
文件分割器是一种实用工具,主要用于将大文件分解成较小的部分,便于存储、传输或管理。在计算机领域,尤其是在处理大型数据文件时,这样的工具尤为重要。本文将深入探讨文件分割器的相关知识点,以及如何使用Java语言实现这一功能。
一、文件分割的概念
文件分割是指将一个大文件分割成多个小文件的操作。这种操作通常出于以下目的:
1. 便于传输:大文件可能超过电子邮件或云存储服务的上传限制,分割后可逐个发送。
2. 节省存储空间:通过分割文件,可以只存储当前需要的部分,而非整个大文件。
3. 分批处理:对于需要分步处理的大型数据文件,分割后可以分别进行操作。
二、文件合并
与文件分割相对应的是文件合并,即把之前分割的多个小文件重新组合成原始的大文件。这一过程通常在接收方完成,确保所有部分都正确无误地恢复到原始状态。
三、Java实现文件分割
在Java中,我们可以利用InputStream和OutputStream类来读取和写入文件。以下是一个简单的文件分割示例:
```java
import java.io.*;
public class FileSplitter {
public static void splitFile(String inputFile, int chunkSize) throws IOException {
FileInputStream fis = new FileInputStream(inputFile);
byte[] buffer = new byte[chunkSize];
int bytesRead;
int part = 1;
while ((bytesRead = fis.read(buffer)) != -1) {
String outputFile = "Part_" + part + ".dat";
FileOutputStream fos = new FileOutputStream(outputFile);
fos.write(buffer, 0, bytesRead);
fos.close();
part++;
}
fis.close();
}
}
```
这个例子中,`splitFile`方法接受一个输入文件路径和每个分片的大小(chunkSize),然后创建一系列名为"Part_1.dat", "Part_2.dat", 等等的小文件。
四、Java实现文件合并
文件合并的Java实现相对简单,只需反向操作,将所有小文件读取并写入新的大文件中:
```java
import java.io.*;
public class FileMerger {
public static void mergeFiles(String[] inputFiles, String outputFile) throws IOException {
FileOutputStream fos = new FileOutputStream(outputFile);
for (String inputFile : inputFiles) {
FileInputStream fis = new FileInputStream(inputFile);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
fis.close();
}
fos.close();
}
}
```
`mergeFiles`方法接收一个包含所有分片文件名的数组和目标输出文件名。它依次读取每个分片,将其内容写入输出文件。
五、注意事项
1. 文件分割时,确保分割大小根据实际需求和系统资源进行适当选择。
2. 文件合并前,需确认所有分片都已完整无误地收到。
3. 在处理大文件时,要考虑到内存限制,避免一次性加载整个文件到内存中。
总结,文件分割器在处理大文件时具有很大的实用性,Java作为跨平台的编程语言,为实现这一功能提供了丰富的API和工具。通过学习和理解上述知识点,开发者可以构建自己的文件分割和合并工具,满足各种场景下的需求。
dp1123
- 粉丝: 3
- 资源: 12
最新资源
- 厚壁压力容器的焊接质量控制.pdf
- 厚壁管焊接接头中间射线检验技术.pdf
- 厚大件35CrMo的焊接 - .pdf
- 厚钢板对接焊接三维有限元数值模拟与分析- .pdf
- 弧形闸门安装施工中的焊接变形控制.pdf
- 华恒机器人焊接系统应用 - .pdf
- 化工工程中现场设备与工艺管道的焊接质量控制.pdf
- 化工设备安装中焊接质量控制.pdf
- 化工焊工工艺学.pdf
- 换热器高压外壳的焊接.pdf
- 换热管-管板焊接接头射线照像技术试验研究.pdf
- 化工用厚壁铜管件焊接裂纹及质量控制研究.pdf
- 换热管与管板的焊接工艺规程.pdf
- 换热器管板堆焊的焊接操作和变形控制 - .pdf
- 换热器管板先胀后焊的焊接工艺.pdf
- 换热器管板焊接变形的控制.pdf