java源码——对文件内容的查找和替换(开始写界面咯)

问题是:“键盘输入文件的路径、查找内容和替换内容,对指定路径的文件的内容进行查找和替换。”

好久没写界面了,今天熟悉一下界面的书写和监听器操作。

这个问题的本身不是很难,重点应该是文件处理时的各种可能出现的错误进行处理。因此写代码时需要非常细心,并且把错误处理到位。

另外,这个界面写的很规范,注释也都很到位,也可以直接拿走留作他用。

上源码。


Replace.java

package com.fuxuemingzhu.replace.main;

import java.awt.Color;//颜色
import java.awt.Font;//字体
import java.awt.event.ActionEvent;//事件处理
import java.awt.event.ActionListener;//事件监听
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JButton;//按钮
import javax.swing.JFrame;//框架
import javax.swing.JLabel;//标签
import javax.swing.JOptionPane;//消息窗口
import javax.swing.JPanel;//面板
import javax.swing.JTextField;//文本框

/**
 * <p>
 * Title: Replace
 * </p>
 * <p>
 * Description:可视化的txt的内容替换程序
 * </p>
 * 
 * @author fuxuemingzhu
 * 
 * @email fuxuemingzhu@163.com
 * 
 * @date 2014年12月5日 下午6:27:50
 */
public class Replace extends JFrame {

	/**
	 * serialVersionUID
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * pnl_mian 主面板
	 */
	public JPanel pnl_mian;
	/**
	 * lbl_help 提示面板
	 */
	public JLabel lbl_help;
	/**
	 * lbl_find 查找内容提示
	 */
	public JLabel lbl_find;
	/**
	 * lbl_replace 替换内容提示
	 */
	public JLabel lbl_replace;
	/**
	 * lbl_path 路径提示
	 */
	public JLabel lbl_path;
	/**
	 * txt_path 文本路径输入
	 */
	public JTextField txt_path;
	/**
	 * txt_find 查找内容输入
	 */
	public JTextField txt_find;
	/**
	 * txt_replace 替换内容输入
	 */
	public JTextField txt_replace;
	/**
	 * btn_sub 确定按键
	 */
	public JButton btn_sub;
	/**
	 * btn_reset 重置按键
	 */
	public JButton btn_reset;

	/**
	 * path 文件路径字符串
	 */
	public static String path;
	/**
	 * find 查找内容字符串
	 */
	public static String find;
	/**
	 * replace 替换内容字符串
	 */
	public static String replace;

	/**
	 * <p>
	 * Title:Replace
	 * </p>
	 * <p>
	 * Description:构造方法
	 * </p>
	 */
	public Replace() {
		pnl_mian = new JPanel();
		lbl_help = new JLabel();
		lbl_find = new JLabel();
		lbl_replace = new JLabel();
		lbl_path = new JLabel();
		txt_path = new JTextField();
		txt_find = new JTextField();
		txt_replace = new JTextField();
		btn_sub = new JButton();
		btn_reset = new JButton();
		userInit();
	}

	/**
	 * <p>
	 * Title: userInit
	 * </p>
	 * <p>
	 * Description:用户界面设置
	 * </p>
	 * 
	 */
	public void userInit() {
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置关闭框架的同时结束程序
		this.setSize(400, 250);// 设置框架大小为长500,宽200
		this.setResizable(false);// 设置框架不可以改变大小
		this.setTitle("查找替换");// 设置框架标题
		this.pnl_mian.setLayout(null);// 设置面板布局管理
		this.pnl_mian.setBackground(Color.cyan);// 设置面板背景颜色
		this.lbl_help.setText("查找替换");// 设置标签标题
		this.lbl_help.setFont(new Font("宋体", Font.BOLD | Font.ITALIC, 14));// 设置标签字体
		this.lbl_help.setForeground(Color.RED);// 设置标签字体颜色
		this.lbl_path.setText("文本路径:");
		this.lbl_find.setText("查找文本:");
		this.lbl_replace.setText("替换为:");
		this.btn_sub.setText("确定");
		this.btn_reset.setText("重置");
		this.lbl_help.setBounds(150, 25, 60, 20);// 设置标签x坐标120,y坐标20,长60,宽20
		this.lbl_path.setBounds(50, 50, 60, 20);
		this.lbl_find.setBounds(50, 80, 60, 20);
		this.lbl_replace.setBounds(50, 110, 60, 25);
		this.txt_path.setBounds(110, 50, 200, 20);
		this.txt_find.setBounds(110, 80, 200, 20);
		this.txt_replace.setBounds(110, 110, 200, 20);
		this.btn_sub.setBounds(105, 160, 60, 20);
		this.btn_sub.addActionListener(new ActionListener()// 匿名类实现ActionListener接口
				{
					public void actionPerformed(ActionEvent e) {
						btnsub_ActionEvent(e);
					}
				});
		this.btn_reset.setBounds(195, 160, 60, 20);
		this.btn_reset.addActionListener(new ActionListener()// 匿名类实现ActionListener接口
				{
					public void actionPerformed(ActionEvent e) {
						btnreset_ActionEvent(e);
					}
				});
		this.pnl_mian.add(lbl_help);// 加载标签到面板
		this.pnl_mian.add(lbl_path);
		this.pnl_mian.add(lbl_find);
		this.pnl_mian.add(lbl_replace);
		this.pnl_mian.add(txt_path);
		this.pnl_mian.add(txt_find);
		this.pnl_mian.add(txt_replace);
		this.pnl_mian.add(btn_sub);
		this.pnl_mian.add(btn_reset);
		this.add(pnl_mian);// 加载面板到框架
		this.setVisible(true);// 设置框架可显
	}

	/**
	 * <p>
	 * Title: btnsub_ActionEvent
	 * </p>
	 * <p>
	 * Description:点击确定键的操作
	 * </p>
	 * 
	 * @param e
	 * 
	 */
	public void btnsub_ActionEvent(ActionEvent e) {
		path = txt_path.getText();
		find = txt_find.getText();
		replace = String.valueOf(txt_replace.getText());
		if (path.equals("")) {
			JOptionPane.showMessageDialog(null, "文件路径不能为空!", "错误",
					JOptionPane.ERROR_MESSAGE);
			return;
		} else if (find.equals("")) {
			JOptionPane.showMessageDialog(null, "查找对象不能为空!", "错误",
					JOptionPane.ERROR_MESSAGE);
			return;
		} else if (replace.equals("")) {
			JOptionPane.showMessageDialog(null, "替换内容不能为空!", "错误",
					JOptionPane.ERROR_MESSAGE);
			return;
		} else {
			File file = new File(path);
			try {
				changeFile(file);
			} catch (Exception e1) {
				e1.printStackTrace();
				return;
			}
			this.dispose();
		}
	}

	/**
	 * <p>
	 * Title: btnreset_ActionEvent
	 * </p>
	 * <p>
	 * Description:点击重置键的操作
	 * </p>
	 * 
	 * @param e
	 * 
	 */
	public void btnreset_ActionEvent(ActionEvent e) {
		txt_path.setText("");
		txt_find.setText("");
		txt_replace.setText("");
	}

	/**
	 * <p>
	 * Title: changeFile
	 * </p>
	 * <p>
	 * Description:读取文件
	 * </p>
	 * 
	 * @param file
	 * @throws Exception
	 * 
	 */
	public static void changeFile(File file) throws IOException {
		BufferedReader br = null;
		try {
			if (!file.exists()) {
				JOptionPane.showMessageDialog(null, "文件路径有误!", "错误",
						JOptionPane.ERROR_MESSAGE);
				return;
			}
			FileReader fileReader = new FileReader(file);
			br = new BufferedReader(fileReader);
			StringBuffer sbf = new StringBuffer("");
			try {
				for (String tmp = null; (tmp = br.readLine()) != null; tmp = null) {
					// 在这里做替换操作
					if (tmp.contains(find)) {
						tmp = tmp.replaceAll(find, replace);
						sbf.append(tmp);
						sbf.append(System.getProperty("line.separator"));
						// 文件的重新写入
						BufferedWriter bw = new BufferedWriter(new FileWriter(
								path));
						bw.write(sbf.toString());
						JOptionPane.showMessageDialog(null, "文件内容已经替换成功!",
								"确定", JOptionPane.YES_OPTION);
						bw.close();
					} else {
						JOptionPane.showMessageDialog(null, "文件中不含有要替换的内容!",
								"确定", JOptionPane.YES_OPTION);
					}

				}
				br.close();
			} catch (IOException e1) {
				JOptionPane.showMessageDialog(null, "文件读取有误!", "错误",
						JOptionPane.ERROR_MESSAGE);
				e1.printStackTrace();
				return;
			}
		} catch (FileNotFoundException e1) {
			JOptionPane.showMessageDialog(null, "文件路径有误!", "错误",
					JOptionPane.ERROR_MESSAGE);
			e1.printStackTrace();
			return;
		}
	}

	/**
	 * <p>
	 * Title: main
	 * </p>
	 * <p>
	 * Description:main方法,程序的入口
	 * </p>
	 * 
	 * @param args
	 * 
	 */
	public static void main(String[] args) {
		new Replace();
	}
}


下面是各种界面,各种秀。嗯~

首先是正常运行界面。


查找不到要替换的内容时的处理。


输入错误路径时的处理。


输入内容为空时的处理。




  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值