`

实例183 - 简单的文件合并工具

 
阅读更多

SequenceInputStream类可以用来接收元素类型为输入流的枚举接口类型。本实例将使用它制作一个文件合并工具,可以使用该工具合并文本文件、音频文件、视频文件等。

心法领悟182:文件合并程序的增强。

  1. 读者可以在本实例的基础上修改表格控件、增加排序功能,并根据排序的结果来创建SequenceInputStream类的对象。
  2. 可以让文件选择器支持选择文件夹,利用文件的扩展名不同将需要合并的文件筛选出来进行合并。
  3. 可以为不同类型的文件专门编写一个合并工具。
    package com.mingrisoft.concat;
    
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.SequenceInputStream;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.UIManager;
    import javax.swing.border.EmptyBorder;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.JTableHeader;
    
    public class FileConcatenation extends JFrame {
        
        /**
         * 
         */
        private static final long serialVersionUID = 5592010207848128980L;
        private JPanel contentPane;
        private JTextField pathTextField;
        private JTable table;
        private int id;
        private List<FileInputStream> files = new ArrayList<FileInputStream>();
        
        /**
         * Launch the application.
         */
        public static void main(String[] args) {
            try {
                UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
            } catch (Throwable e) {
                e.printStackTrace();
            }
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        FileConcatenation frame = new FileConcatenation();
                        frame.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
        
        /**
         * Create the frame.
         */
        public FileConcatenation() {
            addWindowListener(new WindowAdapter() {
                public void windowActivated(WindowEvent e) {
                    do_this_windowActivated(e);
                }
            });
            setTitle("\u6587\u4EF6\u5408\u5E76\u5DE5\u5177");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setBounds(100, 100, 450, 300);
            contentPane = new JPanel();
            contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
            contentPane.setLayout(new BorderLayout(0, 0));
            setContentPane(contentPane);
            
            JPanel choosePanel = new JPanel();
            contentPane.add(choosePanel, BorderLayout.NORTH);
            
            JLabel label = new JLabel("\u65B0\u6587\u4EF6\u7684\u7EDD\u5BF9\u8DEF\u5F84\uFF1A");
            label.setFont(new Font("微软雅黑", Font.PLAIN, 16));
            choosePanel.add(label);
            
            pathTextField = new JTextField();
            pathTextField.setFont(new Font("微软雅黑", Font.PLAIN, 16));
            choosePanel.add(pathTextField);
            pathTextField.setColumns(10);
            
            JButton chooseButton = new JButton("\u589E\u52A0\u6587\u4EF6");
            chooseButton.setFont(new Font("微软雅黑", Font.PLAIN, 16));
            chooseButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    do_chooseButton_actionPerformed(e);
                }
            });
            choosePanel.add(chooseButton);
            
            JPanel buttonPanel = new JPanel();
            contentPane.add(buttonPanel, BorderLayout.SOUTH);
            
            JButton concatButton = new JButton("\u5408\u5E76\u6587\u4EF6");
            concatButton.setFont(new Font("微软雅黑", Font.PLAIN, 16));
            concatButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    do_concatButton_actionPerformed(e);
                }
            });
            buttonPanel.add(concatButton);
            
            JScrollPane scrollPane = new JScrollPane();
            contentPane.add(scrollPane, BorderLayout.CENTER);
            
            table = new JTable();
            table.setFont(new Font("微软雅黑", Font.PLAIN, 14));
            table.setRowHeight(30);
            JTableHeader header = table.getTableHeader();
            header.setFont(new Font("微软雅黑", Font.PLAIN, 16));
            header.setPreferredSize(new Dimension(header.getWidth(), 35));
            scrollPane.setViewportView(table);
        }
        
        protected void do_chooseButton_actionPerformed(ActionEvent e) {
            JFileChooser fileChooser = new JFileChooser();
            fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
            int result = fileChooser.showOpenDialog(this);
            if (result == JFileChooser.APPROVE_OPTION) {
                File file = fileChooser.getSelectedFile();
                try {
                    files.add(new FileInputStream(file));
                } catch (FileNotFoundException e1) {
                    e1.printStackTrace();
                }
                DefaultTableModel model = (DefaultTableModel) table.getModel();
                model.addRow(new Object[] { ++id, file.getName() });
            }
        }
        
        protected void do_concatButton_actionPerformed(ActionEvent e) {
            String fileName = pathTextField.getText();
            if (fileName.length() == 0) {
                JOptionPane.showMessageDialog(this, "请输入新文件的绝对路径", "", JOptionPane.WARNING_MESSAGE);
                return;
            }
            if (files.size() == 0) {
                JOptionPane.showMessageDialog(this, "请选择要合并的文件", "", JOptionPane.WARNING_MESSAGE);
                return;
            }
            SequenceInputStream sis = new SequenceInputStream(Collections.enumeration(files));
            BufferedInputStream bis = new BufferedInputStream(sis);
            FileOutputStream out = null;
            try {
                out = new FileOutputStream(fileName);
                int length;
                while ((length = bis.read()) != -1) {
                    out.write(length);
                }
            } catch (IOException e1) {
                e1.printStackTrace();
            } finally {
                if (out != null) {
                    try {
                        out.close();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
            }
            JOptionPane.showMessageDialog(this, "文件合并成功!", "", JOptionPane.WARNING_MESSAGE);
        }
        
        protected void do_this_windowActivated(WindowEvent e) {
            DefaultTableModel model = (DefaultTableModel) table.getModel();
            model.setColumnIdentifiers(new Object[] { "序号", "文件名" });
            table.setModel(model);
        }
    }
    
     
分享到:
评论

相关推荐

    基于Java的实例源码-GIF动画制作工具 GiftedMotion.zip

    这个名为"基于Java的实例源码-GIF动画制作工具 GiftedMotion.zip"的压缩包文件提供了一个使用Java编写的GIF动画制作工具——GiftedMotion的源代码。通过学习和理解这个工具的源码,开发者可以深入了解如何在Java环境...

    基于Java的实例源码-JSCSS压缩工具 YUI Compressor.zip

    )开发的开源工具,主要用于压缩JavaScript (JS) 和 Cascading Style Sheets (CSS) 文件,以减小网页资源的大小,提高网页加载速度,进而优化用户体验。这个压缩工具基于Java编写,因此具有跨平台的特性,可以在多种...

    ASP实例开发源码-数据合并排序提取批量查询实用小工具.zip

    这个压缩包“ASP实例开发源码-数据合并排序提取批量查询实用小工具.zip”提供了一些关于ASP编程的实践示例,特别是针对数据处理方面的功能。 1. 数据合并:在Web开发中,数据合并通常涉及到将来自多个数据源的数据...

    (orc + snappy / zlib ) 多线程并行合并小文件工具类 (出自:flink自定义合并orc小文件处)

    `OrcFileMergingCommitPolicy.java` 可能是这个工具的核心类,它实现了Flink的提交策略,当任务完成时,将orc小文件合并成一个或几个大文件。这种策略可能涉及到读取所有小文件,然后按列进行排序和合并,确保合并后...

    文件分割合并工具

    在接收完所有分割文件后,用户可以使用文件合并工具将它们恢复原状,确保数据的完整性。这个过程通常只需要按照原始顺序将所有小文件输入到合并工具,然后工具会自动完成合并,生成与原始文件完全一致的复制品。 ...

    PHP经典实例--数组

    3. 数组的合并:使用array_merge()函数可以合并两个或更多数组。例如: ```php $array1 = array('a', 'b', 'c'); $array2 = array('d', 'e', 'f'); $mergedArray = array_merge($array1, $array2); ``` `$...

    ANSYS ICEM CFD 网格划分技术实例详解几何文件

    **ANSYS ICEM CFD 网格划分技术实例详解** 在进行流体力学、热力学或声学等工程分析时,准确的网格划分是至关重要的。ANSYS ICEM CFD(ICEM Computational Fluid Dynamics)是一款强大的前处理工具,专为生成高质量...

    cocos2d-x学习笔记(17)--简单游戏实例1--双枪手

    【cocos2d-x学习笔记(17)--简单游戏实例1--双枪手】 cocos2d-x是一款基于C++的开源游戏开发框架,广泛应用于2D游戏、UI界面和实时渲染场景。本笔记将围绕如何使用cocos2d-x构建一个简单的双枪手游戏实例进行深入...

    实例6--文字滚屏

    【描述】虽然描述部分为空,但根据标题我们可以推测,这个实例可能提供了一个简单的代码示例或工具,用于在屏幕上动态地滚动文字。通常,这样的功能会用到循环、定时器以及字符串处理等编程概念。博主可能在他们的...

    医学分析实例教程-含源码、数据与案例分析

    《医学分析实例教程》是一本全面讲解如何使用R语言进行医学数据分析的实战指南。它包含了丰富的源代码、实际数据集以及详细的案例分析,旨在帮助读者深入理解和应用R语言在医学统计分析中的各种方法。 首先,我们要...

    单片机C语言实例--33-9999累减.zip

    - `9999累减.Opt`:这是编译过程中的优化报告文件,通常包含编译器对代码的优化信息,如删除未使用的变量、合并重复代码等。 - `9999累减.plg`:可能是链接器的插件或日志文件,记录了链接过程中的信息,如符号...

    PHP实例开发源码-CSS精简优化工具.zip

    CSS精简优化工具通过删除不必要的空格、注释、换行,以及合并重复规则等方式,可以显著减小CSS文件大小,从而提高页面加载速度。 PHP作为该工具的实现语言,具有灵活性和可扩展性。它可以通过读取、解析、处理和...

    计算机软件-商业源码-实例96 实现文件分割与合并.zip

    而文件合并则是将这些小文件恢复成原来的完整文件。在计算机科学中,这两种操作经常用于处理超大文件,因为单个大文件可能超过操作系统或存储设备的限制,或者为了提高传输效率。 1. **文件读取**:在进行文件分割...

    python实例29-在Word表格中将上下行相同内容的单元格自动合并.rar

    这个实例"python实例29-在Word表格中将上下行相同内容的单元格自动合并.rar"主要展示了如何利用Python来自动化处理Word表格,特别是针对具有重复内容的单元格进行合并。这个过程涉及到的关键知识点包括: 1. **...

    数据合并工具.rar

    dbf文件合并、目录链接及数据汇总,帮助您整理文件,方便您的操作。适用于总部管理、统计、办公、财务、个人等处理文件时使用。不影响原文件内容和格式 一、当鼠标停在按钮键上时,会显示出相应的操作说明。每步...

    基于Java的实例开发源码-GIF动画制作工具 GiftedMotion.zip

    【标题】: "基于Java的实例开发源码-GIF动画制作工具 GiftedMotion.zip" 提供了一个使用Java语言实现的GIF动画制作工具的源代码。这个项目名为GiftedMotion,它展示了如何利用Java编程语言来创建一个功能完备的GIF...

    VB6.0压缩文件、解压文件、合并文件源码实例.rar

    VB6.0压缩文件、解压文件、合并文件源码实例,这个小工具的用处在于:你可以把图片文件和压缩文件合并起来,传到网上相册中,既保存了图片,同时也把你的文件(可以合并个人隐私文件哦!)传了上去。打开这个文件时...

    python实例24-批量更改Excel文件中200多个工作表的内容.rar

    这个实例"python实例24-批量更改Excel文件中200多个工作表的内容"展示了如何利用Python库来高效地操作Excel文件中的多个工作表。 Python提供了多种库来与Excel文件交互,其中最常用的是`openpyxl`和`pandas`。在这...

    mp3文件合并工具开发源码

    本项目涉及的是一个使用C#语言编写的MP3文件合并工具的开发源码,这个工具利用了NuGet包管理器安装的Naudio库来实现功能。下面将详细阐述这个工具的工作原理、Naudio组件的作用以及C#在音频处理中的应用。 首先,...

Global site tag (gtag.js) - Google Analytics