返回顶部
首页 > 资讯 > 后端开发 > Python >Java实现查找文件和替换文件内容
  • 712
分享到

Java实现查找文件和替换文件内容

Java查找文件Java 替换文件内容Java 替换内容 2022-11-13 14:11:51 712人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、题目描述-查找指定类型的文件1、题目2、解题思路3、代码详解4、多学一个知识点二、题目描述-用树型结构显示路径1、题目2、解题思路3、代码详解三、题目描述-查找并替换文件内容

一、题目描述-查找指定类型的文件

1、题目

题目:在操作系统中,通过文件的扩展名来区别不同类型的文件 。实现根据用户输入的扩展名,列出指定文件夹内该类型文件的文件名,文件大小和修改时间。

2、解题思路

创建一个类:FilesList

FilesList类继承JFrame,使用窗体作为界面。

有一个输入的文本框,用来输入文件扩展名

有一个“选择文件夹”按钮,点击后,程序会先判断输入的文件扩展名是否为空,如果为空,提示:请输入文件类型。如果不为空,用输入的文件扩展名过滤用户选择的文件夹里的文件,并显示在界面上。

过滤的方法是用File类的listFiles方法进行过滤

3、代码详解

package com.xiaoxuzhu;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.text.SimpleDateFORMat;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.jscrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;


public class FilesList extends JFrame {

    
    private static final long serialVersionUID = -2029566581047632579L;
    private JPanel contentPane;
    private JTextField textField;
    private JTable table;

    
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    FilesList frame = new FilesList();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    
    public FilesList() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.NORTH);

        JLabel label = new JLabel("输入文件扩展名:");
        label.setFont(new Font("微软雅黑", Font.PLAIN, 15));
        panel.add(label);

        textField = new JTextField();
        textField.setFont(new Font("微软雅黑", Font.PLAIN, 15));
        panel.add(textField);
        textField.setColumns(12);

        JButton button = new JButton("选择文件夹");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                do_button_actionPerformed(e);
            }
        });
        button.setFont(new Font("微软雅黑", Font.PLAIN, 15));
        panel.add(button);

        JScrollPane scrollPane = new JScrollPane();
        contentPane.add(scrollPane, BorderLayout.CENTER);

        table = new JTable();
        JTableHeader header = table.getTableHeader();
        header.setFont(new Font("微软雅黑", Font.PLAIN, 15));
        header.setPreferredSize(new Dimension(header.getWidth(), 25));// 修改表头的高度
        table.setFont(new Font("微软雅黑", Font.PLAIN, 13));
        table.setRowHeight(25);
        DefaultTableModel model = (DefaultTableModel) table.getModel();
        model.setColumnIdentifiers(new String[] { "文件名", "文件大小", "修改时间" });
        scrollPane.setViewportView(table);
    }

    protected void do_button_actionPerformed(ActionEvent e) {
        final String fileType = textField.getText();// 获得用户输入的文件类型
        if (fileType.isEmpty()) {// 提示用户输入文件类型
            JOptionPane.showMessageDialog(this, "请输入文件类型!", "", JOptionPane.WARNING_MESSAGE);
            return;
        }
        JFileChooser chooser = new JFileChooser();// 创建文件选择器
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);// 设置仅能选择文件夹
        chooser.setMultiSelectionEnabled(false);// 禁止选择多个文件夹
        int result = chooser.showOpenDialog(this);// 打开文件选择器
        if (result == JFileChooser.APPROVE_OPTION) {
            File[] listFiles = chooser.getSelectedFile().listFiles(new java.io.FileFilter() {

                @Override
                public boolean accept(File pathname) {
                    if (pathname.getName().toLowerCase().endsWith(fileType.toLowerCase())) {
                        return true;
                    } else {
                        return false;
                    }
                }
            });// 获得符合条件的文件
            table.removeAll();
            DefaultTableModel model = (DefaultTableModel) table.getModel();// 获得默认表格模型
            
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 指定日期格式
            for (File file : listFiles) {
                String name = file.getName();// 获得文件名
                long size = file.length();// 获得文件大小
                String modifyDate = format.format(new Date(file.lastModified()));// 获得文件修改日期
                model.addRow(new String[] { name, "" + size, modifyDate });// 向表格中增加数据
            }
            table.setModel(model);// 更新表格模型
        }

    }
}

4、多学一个知识点

字符串变成小写的字符串,可以用函数

toLowerCase().

用法

String fileType = "MD";
fileType = fileType.toLowerCase();//获取小写的字符串

二、题目描述-用树型结构显示路径

1、题目

题目:操作系统主要是以树结构来管理文件。用JAVA的树控件,来显示文件结构。

2、解题思路

创建一个类:FilesTree

FilesList类继承JFrame,使用窗体作为界面。

用JFrame添加一个JTree控件

为JTree控件添加一个系统文件根

系统文件根可以用File的listRoots()方法获取。

3、代码详解

package com.xiaoxuzhu;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.io.File;
import java.io.FileFilter;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreenode;
import javax.swing.event.TreeSelectionListener;
import javax.swing.event.TreeSelectionEvent;


public class FilesTree extends JFrame {

    
    private static final long serialVersionUID = -2055459510450224221L;
    private JPanel contentPane;
    private JTree tree;

    
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    FilesTree frame = new FilesTree();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    
    public FilesTree() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JScrollPane scrollPane = new JScrollPane();
        contentPane.add(scrollPane, BorderLayout.CENTER);

        File[] disks = File.listRoots();// 获得所有可用的文件系统根
        DefaultMutableTreeNode root = new DefaultMutableTreeNode();// 创建节点
        for (File disk : disks) {// 将File数组中的元素增加到节点上
            root.add(new DefaultMutableTreeNode(disk));
        }
        tree = new JTree(root);// 使用节点创建树控件
        tree.addTreeSelectionListener(new TreeSelectionListener() {
            public void valueChanged(TreeSelectionEvent e) {
                do_tree_valueChanged(e);
            }
        });
        scrollPane.setViewportView(tree);
    }

    protected void do_tree_valueChanged(TreeSelectionEvent e) {
        // 获得用户选择的节点
        DefaultMutableTreeNode selectNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
        File selectFile = (File) selectNode.getUserObject();// 获得节点代表的File类型对象
        if (selectFile.isDirectory()) {// 如果File类型对象是文件夹
            File[] files = selectFile.listFiles(new FileFilter() {

                @Override
                public boolean accept(File pathname) {// 过滤掉隐藏类型文件
                    if (pathname.isHidden()) {
                        return false;
                    } else {
                        return true;
                    }
                }
            });
            for (File file : files) {// 将符合条件的File类型对象增加到用户选择的节点中
                selectNode.add(new DefaultMutableTreeNode(file));
            }
        } else {
            return;
        }
    }
}

双击可展开文件夹

三、题目描述-查找并替换文件内容

1、题目

题目:实现不需要打开文件,也能替换文件内容。

2、解题思路

创建一个类:ReplaceTool

ReplaceTool类继承JFrame,使用窗体作为界面。

有两个输入框:替换前字符串和替换后字符串

创建一个选择文件按钮,选择要替换哪个文件

创建一个开始替换按钮,根据输入框的内容,进行替换

替换字符串用的函数是String类的replace方法

3、代码详解

使用pom,引入htuool的包,主要用这个工具方法: IoUtil.read,用来读取文件的内容。

  <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-core</artifactId>
            <version>5.6.5</version>
        </dependency>
package com.xiaoxuzhu;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
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.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileNameExtensionFilter;



public class ReplaceTool extends JFrame {

    
    private static final long serialVersionUID = -6579898848014795564L;
    private JPanel contentPane;
    private JTextField beforeTextField;
    private JTextField afterTextField;
    private File textFile;

    
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ReplaceTool frame = new ReplaceTool();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    
    public ReplaceTool() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 400, 150);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(new GridLayout(2, 1, 5, 5));

        JPanel contentPanel = new JPanel();
        contentPane.add(contentPanel);

        JLabel beforeLabel = new JLabel("替换前字符串:");
        contentPanel.add(beforeLabel);

        beforeTextField = new JTextField();
        contentPanel.add(beforeTextField);
        beforeTextField.setColumns(10);

        JButton chooseButton = new JButton("选择文件");
        chooseButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                do_chooseButton_actionPerformed(e);
            }
        });
        contentPanel.add(chooseButton);

        JPanel buttonPanel = new JPanel();
        contentPane.add(buttonPanel);

        JButton replaceButton = new JButton("开始替换");
        replaceButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                do_replaceButton_actionPerformed(e);
            }
        });

        JLabel afterlabel = new JLabel("替换后字符串:");
        buttonPanel.add(afterlabel);

        afterTextField = new JTextField();
        buttonPanel.add(afterTextField);
        afterTextField.setColumns(10);
        buttonPanel.add(replaceButton);
    }

    protected void do_chooseButton_actionPerformed(ActionEvent e) {
        JFileChooser chooser = new JFileChooser();
        chooser.setFileFilter(new FileNameExtensionFilter("文本文件", "txt"));
        chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        chooser.setMultiSelectionEnabled(false);
        int result = chooser.showOpenDialog(this);
        if (result == JFileChooser.APPROVE_OPTION) {
            textFile = chooser.getSelectedFile();
        }
    }

    protected void do_replaceButton_actionPerformed(ActionEvent e) {
        String before = beforeTextField.getText();// 获得替换前字符串
        if (before.isEmpty()) {// 验证字符串是否为空
            JOptionPane.showMessageDialog(this, "请输入替换前字符串", "警告信息", JOptionPane.WARNING_MESSAGE);
            return;
        }
        String after = afterTextField.getText();// 获得替换后字符串
        if (after.isEmpty()) {// 验证字符串是否为空
            JOptionPane.showMessageDialog(this, "请输入替换后字符串", "警告信息", JOptionPane.WARNING_MESSAGE);
            return;
        }
        FileReader reader = null;// 创建文件读流
        FileWriter writer = null;// 创建文件写流
        StringBuilder sb = new StringBuilder();// 使用StringBuilder对象保存文件内容
        int flag = 0;// 声明文件读入标示
        char[] temp = new char[1024];// 使用字符数组读入文件
        try {
            reader = new FileReader(textFile);// 使用选择的文件创建读流
            while ((flag = reader.read(temp)) != -1) {
                sb.append(temp);// 读入文件中的内容
            }
            String content = sb.toString().replace(before, after);// 替换字符串
            writer = new FileWriter(textFile);// 创建文件写流
            writer.write(content); // 将替换后的字符串写入到文件
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();// 关闭文件读流
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (writer != null) {
                try {
                    writer.close();// 关闭文件写流
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }
        JOptionPane.showMessageDialog(this, "字符串替换成功!");
        return;
    }
}

替换前的文本内容

替换结果

以上就是Java实现查找文件和替换文件内容的详细内容,更多关于Java查找文件 替换内容的资料请关注编程网其它相关文章!

--结束END--

本文标题: Java实现查找文件和替换文件内容

本文链接: https://lsjlt.com/news/171987.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java实现查找文件和替换文件内容
    目录一、题目描述-查找指定类型的文件1、题目2、解题思路3、代码详解4、多学一个知识点二、题目描述-用树型结构显示路径1、题目2、解题思路3、代码详解三、题目描述-查找并替换文件内容...
    99+
    2022-11-13
    Java查找文件 Java 替换文件内容 Java 替换内容
  • Linux文件内容查找和替换的方法是什么
    本篇内容主要讲解“Linux文件内容查找和替换的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux文件内容查找和替换的方法是什么”吧!1、通过vim编辑器来替换 vi/...
    99+
    2023-06-28
  • python实现批量文件内容替换
    使用python实现批量文件内容替换,如下:#!/usr/bin/env pythonimport fileinputfor line in fileinput.input('test.txt',inplace=1,backup='.bak...
    99+
    2023-01-31
    批量 文件 内容
  • Python替换文件内容(文件处理)
    #需求用Python来替换掉文件里面的内容#脚本内容如下#!/usr/bin/env python #_*_ coding:utf-8 _*_ import sys,os #小于四个位置变量则退出脚本 if len(sys.argv) &...
    99+
    2023-01-31
    文件 内容 Python
  • nodejs中替换文件内容
    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它使得 JavaScript 可以被用作后端开发语言。一个常见的需求是在 Node.js 中修改文件内容。本文将介绍如何使用 Node.js 中的 fs...
    99+
    2023-05-24
  • python 3文件内容替换
    在原有的文件上,修改替换,并放到新的文件里 old = open('day','r') new = open('new_day','w') old_replace = input('please replace content:') ne...
    99+
    2023-01-31
    文件 内容 python
  • Python基于文件内容实现查找文件功能
    目录文件查找操作glob 的介绍glob 的基本使用查找指定的文件基于文件内容查找文件该章节将学习关于文件查找的操作,大家都知道,无论是 Linux 系统还是 Windows 系统都...
    99+
    2024-04-02
  • Shell脚本实现批量替换文件内容
    今天同事发现内部服务器的硬盘空间不够了,上面有很多备份,我又不能删除,重新找了个320g的硬盘挂载了上,想以后shell脚本下的备份都转移到新硬盘上,给老硬盘腾出空间来,原备份路径是/data/online...
    99+
    2022-06-04
    批量 脚本 文件
  • php批量替换文件内容如何实现
    在PHP中,可以使用file_get_contents()和file_put_contents()函数来实现批量替换文件内容。以下是...
    99+
    2024-04-02
  • linux如何替换文件内容
    linux中替换文件内容的方法:在linux终端可使用sed命令来替换文件内容;sed语法格式为:“sed -i [替换格式] [文件名]”,该语法中的替换格式为:“'s###'  --->  &#...
    99+
    2024-04-02
  • linux批量替换文件内容
    一、linux批量替换文件内容 : sed -i "s/旧内容/新内容/g" `grep 旧内容 -rl 文件夹路径` 例如将/var/www/test文件夹下的所有文件内容中的abc字符串换成12...
    99+
    2023-09-03
    linux 运维 服务器
  • linux下怎么实现批量替换文件内容
    这篇文章主要讲解了“linux下怎么实现批量替换文件内容”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux下怎么实现批量替换文件内容”吧!对于单个文件,使用sed命令很容易做到。如果需...
    99+
    2023-06-13
  • Python清空文件并替换内容
    有个文本文件,需要替换里面的一个词,用python来完成,我是这样写的:def modify_text(): with open('test.txt', "r+") as f: read_data = f.read...
    99+
    2023-01-31
    清空 文件 内容
  • vbs如何实现批量文件查找替换功能
    这篇文章主要讲解了“vbs如何实现批量文件查找替换功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vbs如何实现批量文件查找替换功能”吧!'====================...
    99+
    2023-06-08
  • python怎么替换文件部分内容
    在Python中,可以使用`open()`函数以及文件对象的一些方法来替换文件部分内容。以下是一个示例代码:```python# 打...
    99+
    2023-08-31
    python
  • Linux怎么批量替换文件内容
    这篇“Linux怎么批量替换文件内容”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux怎么批量替换文件内容”文章吧。方...
    99+
    2023-06-28
  • linux如何批量替换文件内容
    这篇文章主要介绍“linux如何批量替换文件内容”,在日常操作中,相信很多人在linux如何批量替换文件内容问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux如何批量替换文件内容”的疑惑有所帮助!接下来...
    99+
    2023-06-29
  • linux怎么替换一行文件内容
    在 Linux 中,可以使用 `sed` 命令来替换一行文件内容。`sed` 是一个流编辑器,可以用于处理以文本形式存储的文件。 要...
    99+
    2023-10-26
    linux
  • linux如何将子文件内容替换
    要将 Linux 中的子文件内容替换,可以使用以下命令: 使用 sed 命令:sed 's/old_content/new_co...
    99+
    2024-04-02
  • 怎么用Shell脚本实现批量替换文件内容
    这篇文章主要讲解了“怎么用Shell脚本实现批量替换文件内容”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Shell脚本实现批量替换文件内容”吧!系统:centos 5.x1.先确认有...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作