每日一个java算法小分享【077合并多个txt文件】

实例说明

  通过IO流可以实现文件的合并,当然可以对任意格式的文件进行合并,本实例以txt文件为例。

关键技术

  本实例实现的文件合并主要通过FileInputStream类读取文件,通过FileOutputStream类向文件中写入内容,在对文件进行读取的过程中,本实例应用了FileInputStream类的avail able()方法,来获取有效的字节数。该方法语法格式如下:

  int available()

可以通过FileInputStream类对象调用该方法。该方法的返回值是可以从输入流中读取的字节数。

注意

  该方法抛出IO异常,在调用该方法时,要通过try语句处理异常。

UniteFile.java

import java.io.*;
import java.util.*;
public class UniteFile {
    byte b1[];
    FileInputStream fi1;
    FileOutputStream fo;    
public void writeFiles(List<File> files,String fileName) {
	try {
		fo = new FileOutputStream(fileName,true);     //根据文件保存地址创建FileOutputStream对象
		for(int i = 0; i < files.size(); i++) { //循环遍历要复制的文件集合
			File file = files.get(i);    //  获取集合中的对象
			fi1 = new FileInputStream(file);    //创建FileIpuStream对象
			b1 = new byte[fi1.available()];    //从流中获取字节数   
 			fi1.read(b1);   //读取数据
 			fo.write(b1);   //向 文件中写入数据
		}   
	} catch(Exception e) {
		e.printStackTrace();
	}
}
}

UniteFrame.java

import java.awt.EventQueue;
import java.awt.FileDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JScrollPane;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import java.io.*;

public class UniteFrame extends JFrame {
    
    private JPanel contentPane;
    private JTextField savePathtextField;
    private JList fileList;
    Vector<String> vector = new Vector<String>();
    DefaultListModel list = new DefaultListModel();
    List<File> listFile = new ArrayList<File>();
   
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    UniteFrame frame = new UniteFrame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    
    /**
     * Create the frame.
     */
    public UniteFrame() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        setTitle("合并txt文件");
        JPanel panel = new JPanel();
        panel.setBounds(0, 0, 434, 262);
        contentPane.add(panel);
        panel.setLayout(null);
        
        JButton choiceButton = new JButton("选择合并文件");
        choiceButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                do_choiceButton_actionPerformed(arg0);
            }
        });
        choiceButton.setBounds(22, 36, 114, 23);
        panel.add(choiceButton);
        
        JButton saveButton = new JButton("保存地址");
        saveButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                do_saveButton_actionPerformed(arg0);
            }
        });
        saveButton.setBounds(22, 187, 114, 23);
        panel.add(saveButton);
        
        savePathtextField = new JTextField();
        savePathtextField.setBounds(152, 188, 228, 21);
        panel.add(savePathtextField);
        savePathtextField.setColumns(10);
        
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(152, 36, 228, 129);
        panel.add(scrollPane);
        
        fileList = new JList(list);
        
        scrollPane.setViewportView(fileList);
        
        JButton submitbutton = new JButton("确定合并");
        submitbutton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                do_button_actionPerformed(arg0);
            }
        });
        submitbutton.setBounds(102, 229, 114, 23);
        panel.add(submitbutton);
    }
    
    protected void do_choiceButton_actionPerformed(ActionEvent arg0) {
        java.awt.FileDialog fd = new FileDialog(this); // 创建选择文件对话框
        fd.setVisible(true); // 设置窗体为可视状态
        String filePath = fd.getDirectory() + fd.getFile(); // 获取用户选择的文件路径
        if (filePath.endsWith(".txt")) { // 判断用户选择的是否为txt文件
            list.addElement(fd.getDirectory() + fd.getFile()); // 将用户选择的文件添加到列表中
            listFile.add(new File((fd.getDirectory() + fd.getFile()))); // 将用户选择的文件名添加到集合对象中
        }
    }
    
    protected void do_saveButton_actionPerformed(ActionEvent arg0) {
        FileDialog saveDialog = new FileDialog(this, "保存文件对话框", FileDialog.SAVE);
        saveDialog.setVisible(true);
        if (saveDialog.getDirectory() + saveDialog.getFile() != null) {
            savePathtextField.setText(saveDialog.getDirectory()
                    + saveDialog.getFile());
        }
    }
    
    protected void do_button_actionPerformed(ActionEvent arg0) {
        UniteFile unitFile = new UniteFile(); // 创建UniteFile对象
        unitFile.writeFiles(listFile, savePathtextField.getText());// 调用合并文件方法
        JOptionPane.showMessageDialog(getContentPane(), "文件合并成功!", "信息提示框",
                JOptionPane.WARNING_MESSAGE); // 为用户提供提示信息对话框
    }
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值