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

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;
/**
 * Description: 
 *
 * @author xiaoxuzhu
 * @version 1.0
 *
 * <pre>
 * 修改记录:
 * 修改后版本	        修改人		修改日期			修改内容
 * 2022/5/2.1	    xiaoxuzhu		2022/5/2		    Create
 * </pre>
 * @date 2022/5/2
 */

public class FilesList extends JFrame {

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

    /**
     * Launch the application.
     */
    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();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    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;
/**
 * Description: 
 *
 * @author xiaoxuzhu
 * @version 1.0
 *
 * <pre>
 * 修改记录:
 * 修改后版本	        修改人		修改日期			修改内容
 * 2022/5/2.1	    xiaoxuzhu		2022/5/2		    Create
 * </pre>
 * @date 2022/5/2
 */

public class FilesTree extends JFrame {

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

    /**
     * Launch the application.
     */
    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();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    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;

/**
 * Description: 
 *
 * @author xiaoxuzhu
 * @version 1.0
 *
 * <pre>
 * 修改记录:
 * 修改后版本	        修改人		修改日期			修改内容
 * 2022/5/2.1	    xiaoxuzhu		2022/5/2		    Create
 * </pre>
 * @date 2022/5/2
 */

public class ReplaceTool extends JFrame {

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

    /**
     * Launch the application.
     */
    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();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    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查找文件 替换内容的资料请关注Devmax其它相关文章!

Java实现查找文件和替换文件内容的更多相关文章

  1. PHP实现文件安全下载

    例如你希望客户要填完一份表格,才可以下载某一文件,你第一个想法一定是用"Redirect"的方法,先检查表格是否已经填写完毕和完整,然后就将网址指到该文件,这样客户才能下载,但如果你想做一个关于"网上购物"的电子商务网站,考虑安全问题,你不想用户直接复制网址下载该文件,笔者建议你使用PHP直接读取该实际文件然后下载的方法去做。feof){echofread;}fclose;}这样就可以用PHP直接输出文件了。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  4. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  5. node下使用UglifyJS压缩合并JS文件的方法

    下面小编就为大家分享一篇node下使用UglifyJS压缩合并JS文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  6. Java实现世界上最快的排序算法Timsort的示例代码

    Timsort 是一个混合、稳定的排序算法,简单来说就是归并排序和二分插入排序算法的混合体,号称世界上最好的排序算法。本文将详解Timsort算法是定义与实现,需要的可以参考一下

  7. Node的文件系统你了解多少

    这篇文章主要为大家详细介绍了Node的文件系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

  8. Java日期工具类的封装详解

    在日常的开发中,我们难免会对日期格式化,对日期进行计算,对日期进行校验,为了避免重复写这些琐碎的逻辑,我这里封装了一个日期工具类,方便以后使用,直接复制代码到项目中即可使用,需要的可以参考一下

  9. Java设计模式之模板方法模式Template Method Pattern详解

    在我们实际开发中,如果一个方法极其复杂时,如果我们将所有的逻辑写在一个方法中,那维护起来就很困难,要替换某些步骤时都要重新写,这样代码的扩展性就很差,当遇到这种情况就要考虑今天的主角——模板方法模式

  10. Java 中 Class Path 和 Package的使用详解

    这篇文章主要介绍了Java 中 Class Path和Package的使用详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部