SequenceInputStream类可以用来接收元素类型为输入流的枚举接口类型。本实例将使用它制作一个文件合并工具,可以使用该工具合并文本文件、音频文件、视频文件等。
心法领悟182:文件合并程序的增强。
- 读者可以在本实例的基础上修改表格控件、增加排序功能,并根据排序的结果来创建SequenceInputStream类的对象。
- 可以让文件选择器支持选择文件夹,利用文件的扩展名不同将需要合并的文件筛选出来进行合并。
-
可以为不同类型的文件专门编写一个合并工具。
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的源代码。通过学习和理解这个工具的源码,开发者可以深入了解如何在Java环境...
)开发的开源工具,主要用于压缩JavaScript (JS) 和 Cascading Style Sheets (CSS) 文件,以减小网页资源的大小,提高网页加载速度,进而优化用户体验。这个压缩工具基于Java编写,因此具有跨平台的特性,可以在多种...
这个压缩包“ASP实例开发源码-数据合并排序提取批量查询实用小工具.zip”提供了一些关于ASP编程的实践示例,特别是针对数据处理方面的功能。 1. 数据合并:在Web开发中,数据合并通常涉及到将来自多个数据源的数据...
`OrcFileMergingCommitPolicy.java` 可能是这个工具的核心类,它实现了Flink的提交策略,当任务完成时,将orc小文件合并成一个或几个大文件。这种策略可能涉及到读取所有小文件,然后按列进行排序和合并,确保合并后...
在接收完所有分割文件后,用户可以使用文件合并工具将它们恢复原状,确保数据的完整性。这个过程通常只需要按照原始顺序将所有小文件输入到合并工具,然后工具会自动完成合并,生成与原始文件完全一致的复制品。 ...
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(ICEM Computational Fluid Dynamics)是一款强大的前处理工具,专为生成高质量...
【cocos2d-x学习笔记(17)--简单游戏实例1--双枪手】 cocos2d-x是一款基于C++的开源游戏开发框架,广泛应用于2D游戏、UI界面和实时渲染场景。本笔记将围绕如何使用cocos2d-x构建一个简单的双枪手游戏实例进行深入...
【描述】虽然描述部分为空,但根据标题我们可以推测,这个实例可能提供了一个简单的代码示例或工具,用于在屏幕上动态地滚动文字。通常,这样的功能会用到循环、定时器以及字符串处理等编程概念。博主可能在他们的...
《医学分析实例教程》是一本全面讲解如何使用R语言进行医学数据分析的实战指南。它包含了丰富的源代码、实际数据集以及详细的案例分析,旨在帮助读者深入理解和应用R语言在医学统计分析中的各种方法。 首先,我们要...
- `9999累减.Opt`:这是编译过程中的优化报告文件,通常包含编译器对代码的优化信息,如删除未使用的变量、合并重复代码等。 - `9999累减.plg`:可能是链接器的插件或日志文件,记录了链接过程中的信息,如符号...
CSS精简优化工具通过删除不必要的空格、注释、换行,以及合并重复规则等方式,可以显著减小CSS文件大小,从而提高页面加载速度。 PHP作为该工具的实现语言,具有灵活性和可扩展性。它可以通过读取、解析、处理和...
而文件合并则是将这些小文件恢复成原来的完整文件。在计算机科学中,这两种操作经常用于处理超大文件,因为单个大文件可能超过操作系统或存储设备的限制,或者为了提高传输效率。 1. **文件读取**:在进行文件分割...
这个实例"python实例29-在Word表格中将上下行相同内容的单元格自动合并.rar"主要展示了如何利用Python来自动化处理Word表格,特别是针对具有重复内容的单元格进行合并。这个过程涉及到的关键知识点包括: 1. **...
dbf文件合并、目录链接及数据汇总,帮助您整理文件,方便您的操作。适用于总部管理、统计、办公、财务、个人等处理文件时使用。不影响原文件内容和格式 一、当鼠标停在按钮键上时,会显示出相应的操作说明。每步...
【标题】: "基于Java的实例开发源码-GIF动画制作工具 GiftedMotion.zip" 提供了一个使用Java语言实现的GIF动画制作工具的源代码。这个项目名为GiftedMotion,它展示了如何利用Java编程语言来创建一个功能完备的GIF...
VB6.0压缩文件、解压文件、合并文件源码实例,这个小工具的用处在于:你可以把图片文件和压缩文件合并起来,传到网上相册中,既保存了图片,同时也把你的文件(可以合并个人隐私文件哦!)传了上去。打开这个文件时...
这个实例"python实例24-批量更改Excel文件中200多个工作表的内容"展示了如何利用Python库来高效地操作Excel文件中的多个工作表。 Python提供了多种库来与Excel文件交互,其中最常用的是`openpyxl`和`pandas`。在这...
本项目涉及的是一个使用C#语言编写的MP3文件合并工具的开发源码,这个工具利用了NuGet包管理器安装的Naudio库来实现功能。下面将详细阐述这个工具的工作原理、Naudio组件的作用以及C#在音频处理中的应用。 首先,...