替换文本文件中指定的内容

      文本替换几乎是所有文本编辑器都支持的功能,但是要限制在编辑器中才可以执行该功能。

本实例实现了指定文本文件中的内容替换,并且不需要再编辑器中打开文本文件。实例的运行效果如下图所示。

替换文本文件中指定的内容_第1张图片

替换文本文件中指定的内容_第2张图片(1)替换前;         替换文本文件中指定的内容_第3张图片(2)替换后。

用到了两个方法:

 (1)append()方法

  利用StringBuilder类的append()方法,可以向该类的对象尾部追加字符串文本,该方法的声明如下:

    public StringBuilder append(String str) 该方法支持重载

(2)replace()方法

  替换字符串要通过String类的replace()方法实现,该方法的声明如下:

    public String replace(CharSequence target, CharSequence replacement)

  参数声明:

  target: 目标字符串

  replace门头:替换的新字符串

 

完整代码如下:

package cn.whut.num;


import java.awt.Desktop;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingConstants;
import javax.swing.JTextField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class ReplaceFileText extends JFrame {

	
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JTextField fileField;
	private JTextField searchTextField;
	private JTextField replaceTextField;
	private File file;
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					ReplaceFileText frame = new ReplaceFileText();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public ReplaceFileText() {
		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);
		
		JButton button = new JButton("\u9009\u62E9\u6587\u4EF6");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				do_button_actionPerformed(e);
			}
			
		});
		button.setBounds(32, 23, 93, 23);
		contentPane.add(button);
		
		JLabel label = new JLabel("\u641C\u7D22\u6587\u672C\uFF1A");
		label.setHorizontalAlignment(SwingConstants.CENTER);
		label.setBounds(32, 56, 93, 15);
		contentPane.add(label);
		
		JLabel label_1 = new JLabel("\u66FF\u6362\u4E3A\uFF1A");
		label_1.setHorizontalAlignment(SwingConstants.CENTER);
		label_1.setBounds(32, 92, 93, 15);
		contentPane.add(label_1);
		
		fileField = new JTextField();
		fileField.setBounds(149, 24, 213, 21);
		contentPane.add(fileField);
		fileField.setColumns(10);
		
		searchTextField = new JTextField();
		searchTextField.setBounds(149, 53, 213, 21);
		contentPane.add(searchTextField);
		searchTextField.setColumns(10);
		
		replaceTextField = new JTextField();
		replaceTextField.setBounds(149, 89, 213, 21);
		contentPane.add(replaceTextField);
		replaceTextField.setColumns(10);
		
		JButton replaceButton = new JButton("\u66FF\u6362");
		replaceButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				do_replaceButton_actionPerformed(e);
			}
			
		});
		replaceButton.setBounds(110, 139, 93, 23);
		contentPane.add(replaceButton);
		
		JButton openfileButton = new JButton("\u6253\u5F00\u6587\u4EF6");
		openfileButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				do_button_2_actionPerformed(e);
			}
		});
		openfileButton.setBounds(246, 139, 93, 23);
		contentPane.add(openfileButton);
	}
	
	private void do_button_actionPerformed(ActionEvent e) {
		JFileChooser chooser = new JFileChooser("./");
		//设置文件的扩展名,以方便过滤
		chooser.setFileFilter(new FileNameExtensionFilter("文本文件", "txt",
				         "java","php","html","htm"));
		//显示文件打开的对话框
		int option = chooser.showOpenDialog(this);
		//确定用户按下“打开”按钮,而非取消按钮
		if(option != JFileChooser.APPROVE_OPTION)
			return;
		//获取用户选择的文件对象
		file = chooser.getSelectedFile();
		//显示文件信息到文本框
		fileField.setText(file.toString());
		
	}
	
	private void do_replaceButton_actionPerformed(ActionEvent e) {
		String searchText = searchTextField.getText();
		String replaceText = replaceTextField.getText();
		if(searchText.isEmpty())
			return;
		try{
			FileReader fis = new FileReader(file);//创建文件输入流
			char[] data = new char[1024];//创建缓冲字符数组
			int rn = 0;
			StringBuilder sb = new StringBuilder();//创建字符串构建器
			while((rn = fis.read(data)) > 0){ //读取文件内容到字符串构建器
				String str = String.valueOf(data,0,rn);
				sb.append(str);
			}
			fis.close();//关闭输入流
			//从构建器中生成字符串,并替换searchText文本
			String str = sb.toString().replace(searchText, replaceText);
			FileWriter fout = new FileWriter(file);//创建文件输出流
			fout.write(str.toCharArray()); //把替换完成的字符串写入文件
			fout.close();//关闭输出流,很重要。
			
		}catch(FileNotFoundException e1){
			e1.printStackTrace();
		}catch(IOException e2){
			e2.printStackTrace();
		}
		JOptionPane.showMessageDialog(null, "替换完成");
		
	}	

	private void do_button_2_actionPerformed(ActionEvent e) {
		try{
			if(file == null)
				return;
			Desktop.getDesktop().edit(file);
		}catch(IOException e3){
			e3.printStackTrace();
		}
		
	}
}


 

 

 

你可能感兴趣的:(Java,文本编辑,字符串)