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 写在之前的 ...
随机推荐
- 微前端框架 single-spa 技术分析
在理解微前端技术原理中我们介绍了微前端的概念和核心技术原理.本篇我们结合目前业内主流的微前端实现 single-spa 来说明在生产实践中是如何实现微前端的. single-spa 的文档略显凌乱,概 ...
- 【豆科基因组】小豆(红豆)adzuki bean, Vigna angularis基因组2015
目录 一.来源 研究一:Draft genome sequence of adzuki bean, Vigna angularis 研究二:Genome sequencing of adzuki be ...
- BSA分析
目录 两种算法 1. 欧氏距离(ED)算法 2. SNP-index算法 实操 1. 上游分析 2. 下游分析 两种算法 1. 欧氏距离(ED)算法 mut与wt分别代表突变型混池.野生型混池,A.C ...
- quota
一.什么是磁盘配额 磁盘配额从字面意思上看就是给一个磁盘配置多少额度,而quota就是有多少限额的意思,所以总的来说就是限制用户对磁盘空间的使用量.因为Linux是多用户多任务的操作系统,许多人公用磁 ...
- Linux—ps -ef 命令输出信息的具体含义(显示所有正在运行的命令程序)
linux 中使用 ps -ef 输出参数的具体含义 功能:显示所有正在运行的命令程序 UID: 说明该程序被谁拥有PID:就是指该程序的 IDPPID: 就是指该程序父级程序的 IDC: 指的是 C ...
- 带你全面了解 OAuth2.0
最开始接触 OAuth2.0 的时候,经常将它和 SSO单点登录搞混.后来因为工作需要,在项目中实现了一套SSO,通过对SSO的逐渐了解,也把它和OAuth2.0区分开了.所以当时自己也整理了一篇文章 ...
- abundant
In ecology [生态学], local abundance is the relative representation of a species in a particular ecosys ...
- 19. awk 命令详解
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...
- Ecshop 后台管理员密码忘记了吧~!~!~!
方法1:把下面的代码保存为文件 mima.php <?php define('IN_ECS', true); require(dirname(__FILE__) . '/includes/ini ...
- 【STM8】STM8S介绍(编程环境、烧录、芯片内容)(Vcap需要一个电容接地)
这篇博客的介绍大纲 [1]我使用的开发板和烧录器 [2]编程环境 [3]烧录软件和界面 [4]芯片内容 [1]我使用的开发板和烧录器 首先,我用的是STM8S003F3P6这款开发板,淘宝上就有了,5 ...