最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實(shí)現(xiàn)查找文本內(nèi)容替換功能示例

 更新時(shí)間:2014年02月27日 15:27:25   作者:  
文本替換幾乎是所有文本編輯器都支持的功能,但是要限制在編輯其中才可以執(zhí)行該功能。本實(shí)例實(shí)現(xiàn)了制定文本文件的內(nèi)容替換,并且不需要再編輯其中打開(kāi)文本文件

思路:

先看視圖層,要有一個(gè)JButton控件用來(lái)選擇文件,一個(gè)JTextField控件顯示選中文件的絕對(duì)路徑,一個(gè)JLabel控件提示用戶(hù)輸入搜索文本,一個(gè)JLabel控件提示用戶(hù)輸入替換后的文本,一個(gè)JTextField標(biāo)簽供用戶(hù)輸入要搜索的文本,一個(gè)JTextField標(biāo)簽供用戶(hù)輸入替換后的文本,一個(gè)JButton控件執(zhí)行替換,一個(gè)JButton控件用來(lái)打開(kāi)修改后的文件。
對(duì)于選擇文件按鈕,使用JButton類(lèi)的addActionListener()方法為其綁定事件,在該事件中定義actionPerformed()函數(shù),在該函數(shù)體中調(diào)用選擇文件的方法。
在選擇文件方法中,首先創(chuàng)建JFileChooser文件選擇器,使用JFileChooser類(lèi)的setFileFilter()方法創(chuàng)建文件擴(kuò)展名過(guò)濾器,再使用JFileChooser類(lèi)的setFileSelectionMode()方法設(shè)置文件選擇模式為文件,通過(guò)JFileChooser類(lèi)的showOpenDialog()方法顯示文件打開(kāi)對(duì)話(huà)框,確定用戶(hù)按下打開(kāi)按鈕,而非取消按鈕后,通過(guò)JFileChooser類(lèi)的getSelectedFile()方法獲取用戶(hù)選擇的文件對(duì)象,使用JTextField類(lèi)的setText()方法顯示文件信息到文本框。
對(duì)于替換按鈕,同選擇文件按鈕,使用JButton類(lèi)的addActionListener()方法為其綁定事件,在該事件中定義actionPerformed()函數(shù),在該函數(shù)體中調(diào)用替換文本的方法。
在替換文本方法中,首先使用TextField類(lèi)的getText()方法獲取要搜索的文本和要替換成的文本,若搜索文本不為空則嘗試創(chuàng)建FileReader文件輸入流和char緩沖字符數(shù)組以及StringBuilder字符串構(gòu)建器,在while()循環(huán)中使用FileReader類(lèi)的read()方法讀取文件內(nèi)容到字符串構(gòu)建器,讀取完畢后使用FileReader類(lèi)的close()方法關(guān)閉輸入流,使用StringBuilder類(lèi)的replace()方法從構(gòu)建器中生成字符串,并替換搜索文本,然后創(chuàng)建FileWriter文件輸出流,使用FileWriter類(lèi)的write()方法把替換完成的字符串寫(xiě)入文件內(nèi),然后使用FileWriter類(lèi)的close()方法關(guān)閉輸出流,然后依次捕獲FileNotFoundException異常和IOException異常,最后使用JOptionPane類(lèi)的showMessageDialog()方法提示用戶(hù)替換完成。
對(duì)于打開(kāi)文件按鈕,使用JButton類(lèi)的addActionListener()方法為其綁定事件,在該事件中定義actionPerformed()函數(shù),在該函數(shù)體中調(diào)用打開(kāi)文件的方法。
在打開(kāi)文件方法中嘗試使用 Desktop.getDesktop().edit(file);,并捕獲IOException異常。
代碼如下:

復(fù)制代碼 代碼如下:

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("打開(kāi)文件");
        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("./");// 創(chuàng)建文件選擇器
        // 設(shè)置文件擴(kuò)展名過(guò)濾器
        chooser.setFileFilter(new FileNameExtensionFilter("文本文件", "txt",
                "java", "php", "html", "htm"));
        // 設(shè)置文件選擇模式
        chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        // 顯示文件打開(kāi)對(duì)話(huà)框
        int option = chooser.showOpenDialog(this);
        // 確定用戶(hù)按下打開(kāi)按鈕,而非取消按鈕
        if (option != JFileChooser.APPROVE_OPTION)
            return;
        // 獲取用戶(hù)選擇的文件對(duì)象
        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);// 創(chuàng)建文件輸入流
            char[] data = new char[1024];// 創(chuàng)建緩沖字符數(shù)組
            int rn = 0;
            StringBuilder sb = new StringBuilder();// 創(chuàng)建字符串構(gòu)建器
            while ((rn = fis.read(data)) > 0) {// 讀取文件內(nèi)容到字符串構(gòu)建器
                String str = String.valueOf(data, 0, rn);
                sb.append(str);
            }
            fis.close();// 關(guān)閉輸入流
            // 從構(gòu)建器中生成字符串,并替換搜索文本
            String str = sb.toString().replace(searchText, replaceText);
            FileWriter fout = new FileWriter(file);// 創(chuàng)建文件輸出流
            fout.write(str.toCharArray());// 把替換完成的字符串寫(xiě)入文件內(nèi)
            fout.close();// 關(guān)閉輸出流
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        JOptionPane.showMessageDialog(null, "替換完成");
    }

    /**
     * 打開(kāi)文件按鈕的事件處理方法。
     *
     * @param e
     */
    protected void do_button_2_actionPerformed(ActionEvent e) {
        try {
            if (file == null)
                return;
            Desktop.getDesktop().edit(file);
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }
}


相關(guān)文章

  • MyBatis如何處理MySQL字段類(lèi)型date與datetime

    MyBatis如何處理MySQL字段類(lèi)型date與datetime

    這篇文章主要介紹了MyBatis如何處理MySQL字段類(lèi)型date與datetime問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • springboot整合sa-token中的redis報(bào)netty錯(cuò)誤問(wèn)題

    springboot整合sa-token中的redis報(bào)netty錯(cuò)誤問(wèn)題

    整合Spring Boot與sa-token-redis-jackson時(shí)遇到Netty版本沖突,通過(guò)將netty-common升級(jí)到與sa-token-redis-jackson兼容的版本4.1.79解決
    2024-11-11
  • 詳談Java中的二進(jìn)制及基本的位運(yùn)算

    詳談Java中的二進(jìn)制及基本的位運(yùn)算

    下面小編就為大家?guī)?lái)一篇詳談Java中的二進(jìn)制及基本的位運(yùn)算。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • Java?Spring中Bean的作用域及生命周期

    Java?Spring中Bean的作用域及生命周期

    這篇文章主要介紹了Java?Spring中Bean的作用域及生命周期,Bean的作用域默認(rèn)是單例模式的,也就是說(shuō)所有?的使?的都是同?個(gè)對(duì)象,更多相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-08-08
  • 一文詳解Java方法重載與遞歸應(yīng)用

    一文詳解Java方法重載與遞歸應(yīng)用

    方法重載 允許在同一個(gè)類(lèi)中定義多個(gè)具有相同名稱(chēng)的方法,但 參數(shù)列表 必須不同,遞歸 是一種讓函數(shù)調(diào)用自身的技術(shù),它提供了一種將復(fù)雜問(wèn)題分解為簡(jiǎn)單問(wèn)題的方法,這樣更容易解決,本文詳細(xì)介紹了Java方法重載與遞歸應(yīng)用,需要的朋友可以參考下
    2024-02-02
  • 基于IDEA中格式化代碼的快捷鍵分享

    基于IDEA中格式化代碼的快捷鍵分享

    這篇文章主要介紹了基于IDEA中格式化代碼的快捷鍵分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • SpringMVC結(jié)合天氣api實(shí)現(xiàn)天氣查詢(xún)

    SpringMVC結(jié)合天氣api實(shí)現(xiàn)天氣查詢(xún)

    這篇文章主要為大家詳細(xì)介紹了SpringMVC結(jié)合天氣api實(shí)現(xiàn)天氣查詢(xún),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 微信公眾號(hào)獲取access_token的方法實(shí)例分析

    微信公眾號(hào)獲取access_token的方法實(shí)例分析

    這篇文章主要介紹了微信公眾號(hào)獲取access_token的方法,結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)微信公眾號(hào)獲取access_token的相關(guān)原理、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • MyBatis主鍵自增的兩種實(shí)現(xiàn)方法

    MyBatis主鍵自增的兩種實(shí)現(xiàn)方法

    本文主要介紹了MyBatis主鍵自增的兩種實(shí)現(xiàn)方法,主要包括注解方式或配置文件方式來(lái)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • 字節(jié)碼調(diào)教入口JVM?寄生插件javaagent

    字節(jié)碼調(diào)教入口JVM?寄生插件javaagent

    這篇文章主要介紹了字節(jié)碼調(diào)教入口JVM?寄生插件javaagent方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08

最新評(píng)論

呼伦贝尔市| 霍林郭勒市| 绵阳市| 瑞安市| 申扎县| 临城县| 马鞍山市| 区。| 罗平县| 夏津县| 新建县| 江北区| 延边| 永胜县| 福鼎市| 巴青县| 琼海市| 临城县| 克拉玛依市| 连南| 青川县| 嘉祥县| 新野县| 濮阳县| 宿州市| 巴彦淖尔市| 柏乡县| 陆丰市| 偃师市| 利津县| 霍邱县| 合作市| 安仁县| 永和县| 楚雄市| 海宁市| 扶绥县| 开原市| 平塘县| 盖州市| 龙山县|