import java.awt.BorderLayout;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
public class FileUniteCut extends JFrame implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* 构造函数界面中加入控件
*/
public static final int LENGTH = 1000;
String folderPath="./huang";
public FileUniteCut (){
super();
JPanel jtool = new JPanel();
jtool.add(open);
jtool.add(delete);
jtool.add(unite);
jtool.add(cut);
open.addActionListener(this);
delete.addActionListener(this);
unite.addActionListener(this);
cut.addActionListener(this);
JPanel jl = new JPanel();
jl.add(list);
JPanel panelMain = new JPanel();
panelMain.setLayout(new BorderLayout());
panelMain.add(jtool,BorderLayout.NORTH);
panelMain.add(jl,BorderLayout.SOUTH);
getContentPane().add(panelMain);
pack();
this.setResizable(false);
this.setLocation(300, 300);
}
JButton open = new JButton("open");
JButton delete = new JButton("delete");
JButton unite = new JButton("unite");
JButton cut = new JButton("cut");
List list = new List(10);
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
/**
* 点击打开时的动作
*/
if(e.getSource() == open){
String inFileName = null;
try{
JFileChooser openChooser=new JFileChooser(".");
openChooser.showOpenDialog(this);
inFileName = openChooser.getSelectedFile().getName();
}catch(Exception e1){
e1.printStackTrace();
return;
}
if(inFileName == null)
return;
String[] a = list.getItems();
int flag = 1;
for(int i = 0; i < a.length; i ++){
if(a[i].equals(inFileName))
flag = 0;
}
if ( flag == 1 )
list.add(inFileName);
else {
java.awt.Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(null,
"文件已经添加!",
"Inane error",
JOptionPane.ERROR_MESSAGE);
}
}
/**
* 点击删除的动作
*/
if(e.getSource() == delete){
int i = -1;
i = list.getSelectedIndex();
if (i != -1)
list.remove(i);
}
/**
* 点击合并的动作
*/
if(e.getSource() == unite){
String in = JOptionPane.showInputDialog(this,
"您想要创建的文件名!");
//判断文件名是否合法
if(!JubgeFileName.isValidName(in)){
java.awt.Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(null,
"文件名不合法!",
"Inane error",
JOptionPane.ERROR_MESSAGE);
return;
}
String fileName = in + ".hcr";
//判断文件是否已经存在
File file = new File(fileName);
if(!file.exists()){
if(in != null){
try{
file.createNewFile();
}catch(IOException ee){
ee.printStackTrace();
}
String[] a = list.getItems();
//写入文件数
AppendToFile.append(fileName,String.valueOf(a.length)+"\n");
String md5Value;
for(int i = 0; i < a.length; i ++ ){
//文件名
AppendToFile.append(fileName, a[i]+"\n");
//字节数
File fa = new File(a[i]);
AppendToFile.append(fileName,String.valueOf(fa.length())+"\n");
md5Value=MD5HashUtil.MD5HashUtilMain(a[i]);
AppendToFile.append(fileName,md5Value+"\n");
}
//跳過LENGTH字節写入各个文件内容
RandomAccessFile randomFile = null;
InputStream small = null;
try{
randomFile = new RandomAccessFile(fileName, "rw");
randomFile.seek(LENGTH);
}catch (IOException e1) {
e1.printStackTrace();
}
for(int i = 0; i < a.length;i ++){
File f = new File(a[i]);
try {
small = new FileInputStream(f);
int tempbyte;
while((tempbyte=small.read()) != -1){
randomFile.write(tempbyte);
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
try{
small.close();
}catch (IOException e1) {
e1.printStackTrace();
}
}
java.awt.Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(null,
"文件成功合并!",
"Inane success",
JOptionPane.INFORMATION_MESSAGE );
}
else{
java.awt.Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(null,
"文件已经存在!",
"Inane warning",
JOptionPane.WARNING_MESSAGE);
}
}
/**
* 点击分割的动作
*/
if(e.getSource() == cut){
String outFileName = null;
try{
JFileChooser cutChooser=new JFileChooser(".");
cutChooser.showOpenDialog(this);
outFileName=cutChooser.getSelectedFile().getName();
}catch(Exception e1){
e1.printStackTrace();
return;
}
if(outFileName == null)
return;
if (!outFileName.contains(".hcr")){
java.awt.Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(null,
"不能分开此类型的文件!",
"Inane error",
JOptionPane.ERROR_MESSAGE);
return;
}
int fileNum = 0;
fileNum = Integer.parseInt(ReadFromFile.readFileEveryLines(outFileName, 1));
if(fileNum == 0){
java.awt.Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(null,
"此文件已损坏!",
"Inane error",
JOptionPane.ERROR_MESSAGE);
return;
}
//新建文件夹
File myFilePath = new java.io.File(folderPath);
try
{
if(myFilePath.isDirectory())
{
java.awt.Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(null,
"文件夹已经存在!",
"Inane warning",
JOptionPane.WARNING_MESSAGE);
return;
}
else
{
myFilePath.mkdir();
}
}catch (Exception e2)
{
e2.printStackTrace();
}
String[] fileName = new String[fileNum];
long[] fileLength = new long[fileNum];
String[] md5Value = new String[fileNum];
int j = 0;
long front=0;
for(int i = 2;i <= 3*fileNum; i ++){
//得到文件名
fileName[j] = ReadFromFile.readFileEveryLines(outFileName, i);
//得到文件长度
fileLength[j] = Long.valueOf(ReadFromFile.readFileEveryLines(outFileName, i+1));
//得到MD5值
md5Value[j] = ReadFromFile.readFileEveryLines(outFileName, i+2);
File file = new File(folderPath,fileName[j]);
if(file.exists()){
java.awt.Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(null,
"文件已经存在!",
"Inane warning",
JOptionPane.WARNING_MESSAGE);
return;
}
//写入各个文件内容
int n=0;
if(j==0)
front = LENGTH;
else
front = front + fileLength[j-1];
RandomAccessFile randomFile = null;
File f = new File(outFileName);
InputStream in = null;
try {
// 一次读一个字节
in = new FileInputStream(f);
randomFile = new
java实现文件合并与分割
需积分: 49 64 浏览量
2008-11-17
18:51:53
上传
评论
收藏 31KB RAR 举报
自然而然发生了
- 粉丝: 4
- 资源: 3
最新资源
- 基于Matlab人脸肤色定理的教师人数统计+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab霍夫曼变换的表盘读数识别+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab火灾烟雾检测源码带GUI界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的恶劣天气交通标志识别系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的霍夫曼变换的表盘示数识别+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的车道线识别系统 +源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的教室人数统计系统带Gui界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的教室人数统计系统带Gui界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB 的霍夫曼变换答题卡识别源码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab+bp神经网络的神经网络汉字识别系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈