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

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

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

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

上源码。

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. Python list的深拷贝和浅拷贝

    深拷贝和浅拷贝 列表存储数据,列表拷贝就是数据备份 浅拷贝 优点:占用内存较少 缺点:修改深层数据,会影响原数据 深拷贝 优点:修改数据,互不影响 缺点:占用内存较大 ""&quo ...

  2. Shell 变量嵌套

    实现:eval 1 a="indv1" 2 indv1="Sus1" 3 4 eval tmp='$'$a 5 echo $tmp //这里 echo 返回值为 ...

  3. 创建一个vue实例

    创建一个vue实例 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的: var vm = new Vue({ // 选项 }) 虽然没有完全遵循 MVVM 模型,但是 Vue ...

  4. Prometheus基础

    监控系统作用 监控系统主要用于保证所有业务系统正常运行, 和业务的瓶颈监控. 需要周期性采集和探测. 采集的详情 采集: 采集器, 被监控端, 监控代理, 应用程序自带仪表盘, 黑盒监控, SNMP. ...

  5. C#判断是否有中文

    using System.Text.RegularExpressions; Regex reg = new Regex(@"[\u4e00-\u9fa5]"); if (reg.I ...

  6. SpringCloud微服务实战——搭建企业级开发框架(三十):整合EasyExcel实现数据表格导入导出功能

      批量上传数据导入.数据统计分析导出,已经基本是系统必不可缺的一项功能,这里从性能和易用性方面考虑,集成EasyExcel.EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项 ...

  7. Hive相关知识点

    ---恢复内容开始--- 转载:Hive 性能优化 介绍 首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题? 数据量大不是问题,数据倾斜是个问题. jobs数比较多的作业运行效率相 ...

  8. Learning Spark中文版--第五章--加载保存数据(1)

      开发工程师和数据科学家都会受益于本章的部分内容.工程师可能希望探索更多的输出格式,看看有没有一些适合他们下游用户的格式.数据科学家可能会更关注他们已经使用的数据格式. Motivation   我 ...

  9. 01 nodejs MVC gulp 项目搭建

    文本内容 使用generator-express创建nodejs MVC DEMO 使用gulp实时编译项目 npm安装二进制包,无须再编译wget https://nodejs.org/dist/v ...

  10. Springboot Oauth2 集成Swagger2权限验证实战

    Swagger是什么?能干什么?在这就不展开讲解了.本文主要讲解如何集成OAuth2的Password模式权限验证,验证接口是否具有权限. 引入依赖 <dependency> <gr ...