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();
}
}下面是各种界面,各种秀。嗯~
首先是正常运行界面。
查找不到要替换的内容时的处理。
输入错误路径时的处理。
输入内容为空时的处理。
java源码——对文件内容的查找和替换(开始写界面咯)的更多相关文章
- java源码——文件读写和单词统计
本文要解决的问题:"键盘输入一段英语语句,将这段话写入content.txt中,然后输出这段话,并且统计语句中英文单词的数目以及各个单词出现的次数." 分析问题知,核心是文件读写和 ...
- 空手套白狼,硬阅java字节码class文件
如下,是一些java字节码也就是原始的class文件,当应用部署到线上之后,我们能够看到的也就是这样的字样了.那么怎样解呢?就让我们一起,来解读解读字节码吧! Offset A B C D E F C ...
- 【JDK命令行 一】手动编译Java源码与执行字节码命令合集(含外部依赖引用)
写作目标 记录常见的使用javac手动编译Java源码和java手动执行字节码的命令,一方面用于应对 Maven 和 Gradle 暂时无法使用的情况,临时生成class文件(使用自己的jar包):另 ...
- 解密随机数生成器(二)——从java源码看线性同余算法
Random Java中的Random类生成的是伪随机数,使用的是48-bit的种子,然后调用一个linear congruential formula线性同余方程(Donald Knuth的编程艺术 ...
- 2018-09-24 Java源码英翻中网页演示
在线演示地址: 源代码翻译 两部分如下. 独立的Java代码翻译库 续前文代码翻译尝试-使用Roaster解析和生成Java源码 源码库: program-in-chinese/java_code_t ...
- Java之修改文件内容:字符串逐行替换
依赖包: <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</a ...
- JVM之---Java源码编译机制
Sun JDK中采用javac将Java源码编译为class文件,这个过程包含三个步骤: 1.分析和输入到符号表(Parse and Enter) Parse过程所做的工作有词法和语法分 ...
- 从Java源码到Java字节码
Java最主流的源码编译器,javac,基本上不对代码做优化,只会做少量由Java语言规范要求或推荐的优化:也不做任何混淆,包括名字混淆或控制流混淆这些都不做.这使得javac生成的代码能很好的维持与 ...
- Android源码开发利器——Java源码调试(基于4.1.2)
原文地址:http://blog.csdn.net/jinzhuojun/article/details/8868038 调试Android Java源码 草帽的后花园——Neo 写在之前的 ...
随机推荐
- dart系列之:数学什么的就是小意思,看我dart如何玩转它
目录 简介 dart:math包的构成 math Random 总结 简介 dart也可以进行数学运算,dart为数学爱好者专门创建了一个dart:math包来处理数学方面的各种操作.dart:mat ...
- eggNOG 5.0数据库介绍
目录 1. eggNOG简介 2. eggNOG-Mapper注释原理 3. eggNOG 5.0数据资源 4. eggNOG-Mapper使用 5. NOG.KOG.COG.KEGG.GO区别? 1 ...
- nginx二级域名指向不同文件项目配置
需要使用泛域名解析, 并且加上空的判断,以保证没有二级域名的也可以访问 核心配置 server_name ~^(?<subdomain>.+)\.caipudq\.cn$;if ( $su ...
- MySQL 的查询优化
说起 MySQL 的查询优化,相信大家收藏了一堆奇技淫巧:不能使用 SELECT *.不使用 NULL 字段.合理创建索引.为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解它背 ...
- 《手把手教你》系列技巧篇(四十七)-java+ selenium自动化测试-判断元素是否显示(详解教程)
1.简介 webdriver有三种判断元素状态的方法,分别是isEnabled,isSelected 和 isDisplayed,其中isSelected在前面的内容中已经简单的介绍了,isSelec ...
- 强化学习实战 | 表格型Q-Learning玩井字棋(一)
在 强化学习实战 | 自定义Gym环境之井子棋 中,我们构建了一个井字棋环境,并进行了测试.接下来我们可以使用各种强化学习方法训练agent出棋,其中比较简单的是Q学习,Q即Q(S, a),是状态动作 ...
- Spark基础:(三)Spark 键值对操作
1.pair RDD的简介 Spark为包含键值对类型的RDD提供了一些专有的操作,这些RDD就被称为pair RDD 那么如何创建pair RDD呢? 在不同的语言中有着不同的创建方式 在pytho ...
- 零基础学习java------31---------共享单车案例,html快速入门(常见标签,get和post的区别)
一 .单车案例 二. HTML快速入门 红字表示要掌握的内容 超文本标记语言,此处的标记指的即是关键字,其用处是用来写页面(展示数据). 语法:(1)./当前目录:../ 父级目录 (2)注释符号: ...
- oracle中的控制语句
一.条件语句1.流程控制-if else(1)ifif 判断条件 then ...end if;(2)if-elseif 判断条件 then ...else ...end ...
- Linux基础命令---httpd守护进程
httpd httpd是apache超文本传输协议的主程序,它被设计成一个独立运行的守护进程.httpd会建立一个线程池来处理http请求. 此命令的适用范围:RedHat.RHEL.Ubuntu.C ...