代码改变世界

查找替换文本文件内容

2011-09-09 14:35  Rollen Holt  阅读(4102)  评论(0编辑  收藏  举报

先看看效果吧:

启动界面:

选择一个文本文件,比如笔者选择了一个,通过查看文件按钮,查看原始文件内容:

然后我打算将java替换为python

在此点击查看文件按钮查看替换之后的文件内容:

程序代码如下:

package File;

import java.awt.Desktop;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

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.JTextField;
import javax.swing.filechooser.FileNameExtensionFilter;

/**
 * 查找替换文本文件的内容
 * */
public class ReplaceFileText extends JFrame{
	JPanel panel = new JPanel();
	JButton chooseButton = new JButton("浏览文件");
	JTextField pathField = new JTextField(20);
	JLabel searchlabel = new JLabel("搜索文本:");
	JTextField searchField = new JTextField(20);
	JLabel replaceLabel = new JLabel("替换为:");
	JTextField replaceField = new JTextField(20);
	JButton replaceButton = new JButton("替换");
	JButton openButton = new JButton("打开查看文件");
	File file = null; // 保存选择的文件

	public ReplaceFileText(){
		init();
		setSize(400, 400);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	}

	private void init(){
		panel.setLayout(new GridLayout(4, 2));
		panel.add(chooseButton);
		panel.add(pathField);
		panel.add(searchlabel);
		panel.add(searchField);
		panel.add(replaceLabel);
		panel.add(replaceField);
		panel.add(replaceButton);
		panel.add(openButton);
		setContentPane(panel);

		chooseButton.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e){
				chooseButton_event();
			}
		});
		replaceButton.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e){
				replaceButton_event();
			}
		});

		openButton.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e){
				openButton_event();
			}
		});

	}

	/**
	 * 选择文件按钮事件处理
	 * */
	public void chooseButton_event(){
		JFileChooser chooser = new JFileChooser();
		// 设置文件扩展名过滤器
		chooser.setFileFilter(new FileNameExtensionFilter("文本文件", "txt",
				"java", "py", "html"));
		// 设置文件选择模式
		chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
		// 显示文件选择对话框
		int option = chooser.showOpenDialog(this);
		// 确定用户按下打开按钮,而不是取消按钮
		if(option != JFileChooser.APPROVE_OPTION){
			return;
		}
		// 获取用户选择的文件
		file = chooser.getSelectedFile();
		// 设置文件路径
		pathField.setText(file.getPath());
	}

	/**
	 * 替换按钮事件处理
	 * */
	public void replaceButton_event(){
		String searchStr = searchField.getText();
		String replaceStr = replaceField.getText();
		if(searchStr == null || replaceStr == null){
			return;
		}
		try{
			FileReader reader = new FileReader(file);
			char[] dates = new char[1024];
			int count = 0;
			StringBuilder sb = new StringBuilder();
			while((count = reader.read(dates)) > 0){
				String str = String.valueOf(dates, 0, count);
				sb.append(str);
			}
			reader.close();
			// 从构造器中生成字符串,并替换搜索文本
			String str = sb.toString().replace(searchStr, replaceStr);
			FileWriter writer = new FileWriter(file);
			writer.write(str.toCharArray());
			writer.close();
		}catch(Exception e){
			e.printStackTrace();
		}
		JOptionPane.showMessageDialog(null, "替换完成");
	}

	/**
	 * 打开文件按钮事件处理
	 * */
	public void openButton_event(){
		Desktop desktop = Desktop.getDesktop();
		if(desktop.isDesktopSupported()){
			try{
				desktop.open(file);
			}catch(IOException e){
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args){
		new ReplaceFileText();
	}
}