替換文字檔案中指定的內容
文字替換幾乎是所有文字編輯器都支援的功能,但是要限制在編輯器中才可以執行該功能。
本例項實現了指定文字檔案中的內容替換,並且不需要再編輯器中開啟文字檔案。例項的執行效果如下圖所示。
(1)替換前; (2)替換後。
用到了兩個方法:
(1)append()方法
利用StringBuilder類的append()方法,可以向該類的物件尾部追加字串文字,該方法的宣告如下:
public StringBuilder append(String str) 該方法支援過載
(2)replace()方法
替換字串要通過String類的replace()方法實現,該方法的宣告如下:
public String replace(CharSequence target, CharSequence replacement)
引數宣告:
target: 目標字串
replace門頭:替換的新字串
完整程式碼如下:
package cn.whut.num;
import java.awt.Desktop;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingConstants;
import javax.swing.JTextField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class ReplaceFileText extends JFrame {
private static final long serialVersionUID = 1L;
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() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JButton button = new JButton("\u9009\u62E9\u6587\u4EF6");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_button_actionPerformed(e);
}
});
button.setBounds(32, 23, 93, 23);
contentPane.add(button);
JLabel label = new JLabel("\u641C\u7D22\u6587\u672C\uFF1A");
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setBounds(32, 56, 93, 15);
contentPane.add(label);
JLabel label_1 = new JLabel("\u66FF\u6362\u4E3A\uFF1A");
label_1.setHorizontalAlignment(SwingConstants.CENTER);
label_1.setBounds(32, 92, 93, 15);
contentPane.add(label_1);
fileField = new JTextField();
fileField.setBounds(149, 24, 213, 21);
contentPane.add(fileField);
fileField.setColumns(10);
searchTextField = new JTextField();
searchTextField.setBounds(149, 53, 213, 21);
contentPane.add(searchTextField);
searchTextField.setColumns(10);
replaceTextField = new JTextField();
replaceTextField.setBounds(149, 89, 213, 21);
contentPane.add(replaceTextField);
replaceTextField.setColumns(10);
JButton replaceButton = new JButton("\u66FF\u6362");
replaceButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_replaceButton_actionPerformed(e);
}
});
replaceButton.setBounds(110, 139, 93, 23);
contentPane.add(replaceButton);
JButton openfileButton = new JButton("\u6253\u5F00\u6587\u4EF6");
openfileButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_button_2_actionPerformed(e);
}
});
openfileButton.setBounds(246, 139, 93, 23);
contentPane.add(openfileButton);
}
private void do_button_actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser("./");
//設定檔案的副檔名,以方便過濾
chooser.setFileFilter(new FileNameExtensionFilter("文字檔案", "txt",
"java","php","html","htm"));
//顯示檔案開啟的對話方塊
int option = chooser.showOpenDialog(this);
//確定使用者按下“開啟”按鈕,而非取消按鈕
if(option != JFileChooser.APPROVE_OPTION)
return;
//獲取使用者選擇的檔案物件
file = chooser.getSelectedFile();
//顯示檔案資訊到文字框
fileField.setText(file.toString());
}
private void do_replaceButton_actionPerformed(ActionEvent e) {
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();//關閉輸入流
//從構建器中生成字串,並替換searchText文字
String str = sb.toString().replace(searchText, replaceText);
FileWriter fout = new FileWriter(file);//建立檔案輸出流
fout.write(str.toCharArray()); //把替換完成的字串寫入檔案
fout.close();//關閉輸出流,很重要。
}catch(FileNotFoundException e1){
e1.printStackTrace();
}catch(IOException e2){
e2.printStackTrace();
}
JOptionPane.showMessageDialog(null, "替換完成");
}
private void do_button_2_actionPerformed(ActionEvent e) {
try{
if(file == null)
return;
Desktop.getDesktop().edit(file);
}catch(IOException e3){
e3.printStackTrace();
}
}
}
相關文章
- javascript如何替換字串中的指定內容JavaScript字串
- js替換字串中的所有指定內容JS字串
- vim內替換檔案內容
- linux批量替換指定資料夾中所有檔案的指定內容Linux
- Sql Server 替換某一列中指定的文字內容SQLServer
- linux替換文字內容Linux
- JavaScript 替換字串全部指定內容JavaScript字串
- jQuery實現的將指定元素中的內容替換jQuery
- js實現的替換字串中的全部指定內容JS字串
- vim 清空內容和替換文字
- Linux給檔案內容每行指定字元資料脫敏替換Linux字元
- grep、sed批量替換檔案內容shell
- excel替換指定列的文字Excel
- linux下批次替換檔案內容(摘)Linux
- python 檔案操作(二) 替換性修改檔案內容Python
- js實現的對字串中的指定內容進行替換操作JS字串
- 指定目錄下的所有檔案中的字串替換字串
- idea替換內容快捷鍵 idea怎麼替換掉所選的文字Idea
- vi 中將 Windows 文字檔案中的 ^M (回車換行)全部替換掉Windows
- whatsns模板檔案中如何呼叫指定類目下的內容
- C# 替換文字檔案中的某一行 (要求此檔案存在)C#
- git檢視指定提交檔案的內容Git
- Python提取文字指定內容Python
- 在指定的檔案過濾想要的內容
- git將指定內容寫入檔案Git
- puppet替換檔案中的string
- js字串中替換指定的的字元JS字串字元
- mysql 如何替換資料表欄位字串中指定單詞的內容MySql字串
- c 刪除檔案中指定的部分內容 (轉)
- jquery實現的設定指定元素的文字內容和html內容jQueryHTML
- 資料庫config.php檔案內容解釋及替換方法資料庫PHP
- jQuery load()方法載入指定檔案內容jQuery
- 如何在MySQL中實現替換欄位部分內容MySql
- python 小程式,替換檔案中的字串Python字串
- javascript刪除具有指定文字內容的li元素JavaScript
- 通過NSInputStream讀取大檔案的指定起始內容
- 批次word文件內容查詢替換的方法
- java檔案相關(檔案追加內容、檔案內容清空、檔案內容讀取)Java