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

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

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

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

上源码。

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();
}
}

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

首先是正常运行界面。

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

输入错误路径时的处理。

输入内容为空时的处理。

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

  1. java源码——文件读写和单词统计

    本文要解决的问题:"键盘输入一段英语语句,将这段话写入content.txt中,然后输出这段话,并且统计语句中英文单词的数目以及各个单词出现的次数." 分析问题知,核心是文件读写和 ...

  2. 空手套白狼,硬阅java字节码class文件

    如下,是一些java字节码也就是原始的class文件,当应用部署到线上之后,我们能够看到的也就是这样的字样了.那么怎样解呢?就让我们一起,来解读解读字节码吧! Offset A B C D E F C ...

  3. 【JDK命令行 一】手动编译Java源码与执行字节码命令合集(含外部依赖引用)

    写作目标 记录常见的使用javac手动编译Java源码和java手动执行字节码的命令,一方面用于应对 Maven 和 Gradle 暂时无法使用的情况,临时生成class文件(使用自己的jar包):另 ...

  4. 解密随机数生成器(二)——从java源码看线性同余算法

    Random Java中的Random类生成的是伪随机数,使用的是48-bit的种子,然后调用一个linear congruential formula线性同余方程(Donald Knuth的编程艺术 ...

  5. 2018-09-24 Java源码英翻中网页演示

    在线演示地址: 源代码翻译 两部分如下. 独立的Java代码翻译库 续前文代码翻译尝试-使用Roaster解析和生成Java源码 源码库: program-in-chinese/java_code_t ...

  6. Java之修改文件内容:字符串逐行替换

    依赖包: <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</a ...

  7. JVM之---Java源码编译机制

    Sun JDK中采用javac将Java源码编译为class文件,这个过程包含三个步骤:     1.分析和输入到符号表(Parse and Enter)    Parse过程所做的工作有词法和语法分 ...

  8. 从Java源码到Java字节码

    Java最主流的源码编译器,javac,基本上不对代码做优化,只会做少量由Java语言规范要求或推荐的优化:也不做任何混淆,包括名字混淆或控制流混淆这些都不做.这使得javac生成的代码能很好的维持与 ...

  9. Android源码开发利器——Java源码调试(基于4.1.2)

     原文地址:http://blog.csdn.net/jinzhuojun/article/details/8868038     调试Android Java源码 草帽的后花园——Neo 写在之前的 ...

随机推荐

  1. springboot与数据访问之jdbc

    官网的starthttps://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-starter 添加依 ...

  2. expr判断文件名以固定格式结尾

    #!/bin/bash if expr "$1" : ".*\.sh" &>/dev/null then echo "okok" ...

  3. python-django 模板的抽象和继承

    {% include %}只需要一句即可,不需要end***

  4. windows下typora图片自动上传到图床(附带腾讯云教程)

    目录 1. 背景 2. 在Typora中使用 3. 安装 3.1 安装教程环境说明 3.2 安装步骤 3.3 配置图床 3.3.1 插件配置 3.3.2 腾讯云参数获取 3.3.2.1 新建子用户,获 ...

  5. C语言中的各种类型所占的字节大小

    一)64位系统和32位有什么区别?  1.64bit CPU拥有更大的寻址能力,最大支持到16GB内存,而32bit只支持4G内存 2.64位CPU一次可提取64位数据,比32位提高了一倍,理论上性能 ...

  6. Navicat连接Linux系统下的Mysql数据库

    1 . 进入Linux机器 , 登录并进入mysql如果没有安装mysql,参照 https://blog.csdn.net/weixin_35353187/article/details/81712 ...

  7. 【MarkDown】--使用教程

    MarkDown使用教程 目录 MarkDown使用教程 一. 常用设置 1.1 目录 1.2 标题 1.3 文本样式 (1)引用 (2)高亮 (3)强调 (4)水平线 (5)上下标 (6)插入代码 ...

  8. pyqt5 的串口编写进度

    2020.12.18 今天遇到一个问题, 想用回车实现串口数据的发送. 下面这句话是让光标移动到文字的尾部,但是不能够实现. 对QTextEdit控件中的文字改写,或清除后,再调用下面的移动到尾部,就 ...

  9. 连接查询条件在on后面和条件在where后面

    emp表结构如下: dept表结构如下: 内连接 条件语句放在on 后面和 where 结果对于inner join结果是一样的 但对于left join 结果会产生不一样 这种现象也比较好理解,如果 ...

  10. Maven项目打包成war包并启动war包运行

    1 项目打包 1.1 右键点击所需要打包的项目,点击如图所示 Maven clean,这里 Maven 会清除掉之前对这个项目所有的打包信息. 1.2进行完 Maven clean 操作后,在ecli ...