文本替换几乎是所有文本编辑器都支持的功能,但是要限制在编辑其中才可以执行该功能。本实例实现了制定文本文件的内容替换,并且不需要再编辑其中打开文本文件。

思路:

  1. 先看视图层,要有一个JButton控件用来选择文件,一个JTextField控件显示选中文件的绝对路径,一个JLabel控件提示用户输入搜索文本,一个JLabel控件提示用户输入替换后的文本,一个JTextField标签供用户输入要搜索的文本,一个JTextField标签供用户输入替换后的文本,一个JButton控件执行替换,一个JButton控件用来打开修改后的文件。
  2. 对于选择文件按钮,使用JButton类的addActionListener()方法为其绑定事件,在该事件中定义actionPerformed()函数,在该函数体中调用选择文件的方法。
  3. 在选择文件方法中,首先创建JFileChooser文件选择器,使用JFileChooser类的setFileFilter()方法创建文件扩展名过滤器,再使用JFileChooser类的setFileSelectionMode()方法设置文件选择模式为文件,通过JFileChooser类的showOpenDialog()方法显示文件打开对话框,确定用户按下打开按钮,而非取消按钮后,通过JFileChooser类的getSelectedFile()方法获取用户选择的文件对象,使用JTextField类的setText()方法显示文件信息到文本框。
  4. 对于替换按钮,同选择文件按钮,使用JButton类的addActionListener()方法为其绑定事件,在该事件中定义actionPerformed()函数,在该函数体中调用替换文本的方法。
  5. 在替换文本方法中,首先使用TextField类的getText()方法获取要搜索的文本和要替换成的文本,若搜索文本不为空则尝试创建FileReader文件输入流和char缓冲字符数组以及StringBuilder字符串构建器,在while()循环中使用FileReader类的read()方法读取文件内容到字符串构建器,读取完毕后使用FileReader类的close()方法关闭输入流,使用StringBuilder类的replace()方法从构建器中生成字符串,并替换搜索文本,然后创建FileWriter文件输出流,使用FileWriter类的write()方法把替换完成的字符串写入文件内,然后使用FileWriter类的close()方法关闭输出流,然后依次捕获FileNotFoundException异常和IOException异常,最后使用JOptionPane类的showMessageDialog()方法提示用户替换完成。
  6. 对于打开文件按钮,使用JButton类的addActionListener()方法为其绑定事件,在该事件中定义actionPerformed()函数,在该函数体中调用打开文件的方法。
  7. 在打开文件方法中尝试使用 Desktop.getDesktop().edit(file);,并捕获IOException异常。

代码如下:

import java.awt.BorderLayout;

public class ReplaceFileText extends JFrame {

    /**
*
*/
private static final long serialVersionUID = 8674569541853793419L;
private JPanel contentPane;
private JTextField fileField;
private JTextField searchTextField;
private JTextField replaceTextField;
private File file; /**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ReplaceFileText frame = new ReplaceFileText();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
} /**
* Create the frame.
*/
public ReplaceFileText() {
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 501, 184);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane); JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(10, 91));
contentPane.add(panel, BorderLayout.CENTER);
GridBagLayout gbl_panel = new GridBagLayout();
gbl_panel.columnWidths = new int[] { 81, 0, 0, 66, 0 };
gbl_panel.rowHeights = new int[] { 23, 0, 0, 0, 0 };
gbl_panel.columnWeights = new double[] { 0.0, 0.0, 0.0, 1.0,
Double.MIN_VALUE };
gbl_panel.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0,
Double.MIN_VALUE };
panel.setLayout(gbl_panel); JButton button = new JButton("选择文件");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_button_actionPerformed(e);
}
});
GridBagConstraints gbc_button = new GridBagConstraints();
gbc_button.anchor = GridBagConstraints.NORTHWEST;
gbc_button.insets = new Insets(0, 0, 5, 5);
gbc_button.gridx = 0;
gbc_button.gridy = 0;
panel.add(button, gbc_button); fileField = new JTextField();
fileField.setEditable(false);
GridBagConstraints gbc_fileField = new GridBagConstraints();
gbc_fileField.gridwidth = 3;
gbc_fileField.insets = new Insets(0, 0, 5, 0);
gbc_fileField.fill = GridBagConstraints.HORIZONTAL;
gbc_fileField.gridx = 1;
gbc_fileField.gridy = 0;
panel.add(fileField, gbc_fileField);
fileField.setColumns(10); JLabel label = new JLabel("搜索文本:");
GridBagConstraints gbc_label = new GridBagConstraints();
gbc_label.anchor = GridBagConstraints.EAST;
gbc_label.insets = new Insets(0, 0, 5, 5);
gbc_label.gridx = 0;
gbc_label.gridy = 1;
panel.add(label, gbc_label); searchTextField = new JTextField();
GridBagConstraints gbc_searchTextField = new GridBagConstraints();
gbc_searchTextField.gridwidth = 3;
gbc_searchTextField.insets = new Insets(0, 0, 5, 0);
gbc_searchTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_searchTextField.gridx = 1;
gbc_searchTextField.gridy = 1;
panel.add(searchTextField, gbc_searchTextField);
searchTextField.setColumns(10); JLabel label_1 = new JLabel("替换为:");
GridBagConstraints gbc_label_1 = new GridBagConstraints();
gbc_label_1.anchor = GridBagConstraints.EAST;
gbc_label_1.insets = new Insets(0, 0, 5, 5);
gbc_label_1.gridx = 0;
gbc_label_1.gridy = 2;
panel.add(label_1, gbc_label_1); replaceTextField = new JTextField();
GridBagConstraints gbc_replaceTextField = new GridBagConstraints();
gbc_replaceTextField.gridwidth = 3;
gbc_replaceTextField.insets = new Insets(0, 0, 5, 0);
gbc_replaceTextField.fill = GridBagConstraints.HORIZONTAL;
gbc_replaceTextField.gridx = 1;
gbc_replaceTextField.gridy = 2;
panel.add(replaceTextField, gbc_replaceTextField);
replaceTextField.setColumns(10); JPanel panel_1 = new JPanel();
GridBagConstraints gbc_panel_1 = new GridBagConstraints();
gbc_panel_1.gridwidth = 4;
gbc_panel_1.fill = GridBagConstraints.BOTH;
gbc_panel_1.gridx = 0;
gbc_panel_1.gridy = 3;
panel.add(panel_1, gbc_panel_1); JButton replaceButton = new JButton("替换");
replaceButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_replaceButton_actionPerformed(e);
}
});
panel_1.add(replaceButton); JButton openfileButton = new JButton("打开文件");
openfileButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_button_2_actionPerformed(e);
}
});
panel_1.add(openfileButton);
} /**
* 选择文件按钮事件处理方法
*
* @param e
*/
protected void do_button_actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser("./");// 创建文件选择器
// 设置文件扩展名过滤器
chooser.setFileFilter(new FileNameExtensionFilter("文本文件", "txt",
"java", "php", "html", "htm"));
// 设置文件选择模式
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
// 显示文件打开对话框
int option = chooser.showOpenDialog(this);
// 确定用户按下打开按钮,而非取消按钮
if (option != JFileChooser.APPROVE_OPTION)
return;
// 获取用户选择的文件对象
file = chooser.getSelectedFile();
// 显示文件信息到文本框
fileField.setText(file.toString());
} /**
* 替换按钮的事件处理方法
*
* @param e
*/
protected void do_replaceButton_actionPerformed(ActionEvent event) {
String searchText = searchTextField.getText();// 获取搜索文本
String replaceText = replaceTextField.getText();// 获取替换文本
if (searchText.isEmpty())
return;
try {
FileReader fis = new FileReader(file);// 创建文件输入流
char[] data = new char[1024];// 创建缓冲字符数组
int rn = 0;
StringBuilder sb = new StringBuilder();// 创建字符串构建器
while ((rn = fis.read(data)) > 0) {// 读取文件内容到字符串构建器
String str = String.valueOf(data, 0, rn);
sb.append(str);
}
fis.close();// 关闭输入流
// 从构建器中生成字符串,并替换搜索文本
String str = sb.toString().replace(searchText, replaceText);
FileWriter fout = new FileWriter(file);// 创建文件输出流
fout.write(str.toCharArray());// 把替换完成的字符串写入文件内
fout.close();// 关闭输出流
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
JOptionPane.showMessageDialog(null, "替换完成");
} /**
* 打开文件按钮的事件处理方法。
*
* @param e
*/
protected void do_button_2_actionPerformed(ActionEvent e) {
try {
if (file == null)
return;
Desktop.getDesktop().edit(file);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}

  效果如图:

Java查找替换文本文件内容的更多相关文章

  1. linux下批量查找/替换文本内容

    一般在本地电脑上批量替换文本有许多工具可以做到,比如sublime text ,但大多服务器上都是无图形界面的,为此收集了几条针对linux命令行 实现批量替换文本内容的命令: 1.批量查找某个目下文 ...

  2. 文件6. 查找替换.txt文本文件中的内容

    servlet实现对文本文件的查找替换 .jsp界面 <form> <table> <tr> <td>选择文本文件:</td> <td ...

  3. Java进阶(三十九)Java集合类的排序,查找,替换操作

    Java进阶(三十九)Java集合类的排序,查找,替换操作 前言 在Java方向校招过程中,经常会遇到将输入转换为数组的情况,而我们通常使用ArrayList来表示动态数组.获取到ArrayList对 ...

  4. java读取文本文件内容2

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/183 很久之前写了一篇Java读取文本文件内容,链接地址是 ...

  5. java读取文本文件内容

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/128 java读取文本文件内容 今天写代码写着要调试一个很 ...

  6. java 集合Collections 工具类:排序,查找替换。Set、List、Map 的of方法创建不可变集合

    Collections 工具类 Java 提供1个操作 Set List Map 等集合的工具类 Collections ,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了将集合 ...

  7. SQL某个字段在原内容上增加固定内容或replace查找替换内容

    今天正好遇到一个SQL小问题,特做备注 在原有的表中数据如pic 在不动原内容的基础上增加../路径,但不能修改原数据值 原数据 SQL: pic字段 需要增加'../'的内容 update Bmps ...

  8. JAVA编码 —— 字符串关键字内容替换

    前言 工作中,我们可能遇到字符串内容替换的场景.例如:我们需要将一个字符串凡是 “#” 标注的,分别替换为不同的内容,那我们应该怎么做呢? 分析,一个字符串可能含有多个“#”,每个 “#”又对应不同的 ...

  9. sed(查找替换) 与awk(提取字段)

    通常: sed 处理列  awk处理行 比较方便 Sed是一个基本的查找替换程序     sed -i   "s/^@//g"     文件  #原地操作原文件,进行替换 cat ...

随机推荐

  1. git 忽略已经添加到版本库的文件

    第一步: 指令:git rm -r --cached YOUR_PATH YOUR_PATH 即 你的文件,-r 指定了递归所有的子文件夹. 第二步: 修改项目根目录下的 .gitignore 文件, ...

  2. Java调用SQL Server存储过程

    1.调用普通存储过程(1)创建存储过程CREATE Procedure [dbo].[GetContactListByName]  /*根据联系人姓名获取联系人信息*/@Name nvarchar(5 ...

  3. python 查看目录下所有目录和文件

    python查看目录下所有的子目录和子文件 python递归遍历目录结构 我喜欢第一种 方法1 import json, os def list_dir(path, res): for i in os ...

  4. Android wpa_supplicant 启动过程

    记录wpa_supplicant启动过程 ini脚本: service wpa_supplicant /vendor/bin/hw/wpa_supplicant \ -ip2p0 -Dnl80211 ...

  5. 第三百二十七节,web爬虫讲解2—urllib库爬虫—基础使用—超时设置—自动模拟http请求

    第三百二十七节,web爬虫讲解2—urllib库爬虫 利用python系统自带的urllib库写简单爬虫 urlopen()获取一个URL的html源码read()读出html源码内容decode(& ...

  6. Java如何重置正则表达式的模式?

    在Java编程中,如何重置正则表达式的模式? 以下示例演示如何使用Pattern类Pattern.compile()方法和Matcher类的m.find()方法来重置正则表达式的模式. package ...

  7. Spring JDBC SqlQuery类示例

    org.springframework.jdbc.object.SqlQuery类提供了表示SQL查询的可重用操作对象. 使用到的 Student 表的结构如下 - CREATE TABLE Stud ...

  8. Python:数组、队列及堆栈的使用(list用法)--转

    Python编程中数组.队列及堆栈用于保存一组数据或对象的序列,元素可以是各种类型混合在一起,定义格式为[元素,元素,……,元素],用变量[位置]即可取出相应的元素,其中“位置”是从零开始计算. 数组 ...

  9. Unity----Scene加载问题

    Unity官方提供了4种加载场景(scene)的方法,分别是: 1. Application.LoadLevel():同步加载 2. Application.LoadLevelAsync():异步加载 ...

  10. EF5+MVC4系列(1) Podwerdesigner15.1设计数据库;PD中间表和EF实体模型设计器生成中间表的区别;EF5.0 表关系插入数据(一对多,多对多)

    在上一篇文章中, http://www.cnblogs.com/joeylee/p/3790980.html  我们用 PD15.1 来设计了数据库,并且生成 了sql数据库,现在我们用 vs2013 ...