⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileos.java

📁 一个JAVA的文件分割器
💻 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 + -