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

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

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

(1)替换前;         (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();
		}
		
	}
}


 

 

 

小软件Replace Plus:为多个文本文件内容批量替换 当我们的文本有些相同的文本内容替换成其他内容时,可以运用到“文本替换”功能,这一功能在诸多的文本编辑软件都有,并不算稀奇。但是,如果你有多个文件,想要同时替换它们面的一些相同内容,显然不是其简单的替换功能就能够达到的。要想批处理完成N个文件的文本同时替换,我给大家推荐一个小工具——Replace Plus。它是一款绿色小软件,并不需要安装,直接双击打开即可使用。   在列表栏点击右键,选择“添加文件”即可将单独的文件添加进列表,如果您想要更加省事一些,就将欲替换文本的文件放置于一个文件夹下。右键点击选择“添加目录”,将那个文件夹添加进来,该目录下的所有文件就直接添加进来了,省去了一个一个添加的麻烦。   在“查找”栏内输入欲查找的内容,在“替换”栏输入欲替换内容,点击“执行替换”,默认情况下会跳出“替换”对话框询问是否要替换,如果要一劳永逸地不必每个文件都跳出对话框来询问,可直接点击“替换全部”。   当列表的“备注”栏显示出“替换成功”,即表示已经将不同文件的相同内容替换完成。并且在列表还会显示替换成功的数量,一目了然(如图),很简便也很实用吧!要删除列表内容,直接选定欲删除的内容后,在右键菜单点击“删除”即可。  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sanqima

一键三连,多多益善

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值