当前位置:   article > 正文

Java文件操作小项目-带GUI界面统计文件夹内文件类型及大小

Java文件操作小项目-带GUI界面统计文件夹内文件类型及大小

引言

在Java编程中,文件操作是一项基本且常见的任务。我们经常需要处理文件和文件夹,例如读取、写入、删除文件,或者遍历文件夹中的文件等。本文将介绍如何使用Java的File类和相关API来统计一个文件夹中不同类型文件的数量和大小。

准备工作

在进行文件操作之前,我们需要引入Java的File类和一些其他必要的类。以下是我们需要导入的类:

  1. import java.io.File;
  2. import java.util.HashMap;

统计文件数量

首先,我们定义一个方法getCount,该方法接收一个File对象作为参数,表示要统计的文件夹。方法返回一个HashMap,其中键是文件类型的扩展名,值是该类型文件的数量。

  1. public static HashMap<String, Integer> getCount(File src) {
  2. HashMap<String, Integer> hm = new HashMap<>();
  3. File[] files = src.listFiles();
  4. if (files != null) {
  5. for (File file : files) {
  6. String fileName = file.getName();
  7. int index = fileName.lastIndexOf(".");
  8. if (index > 0) {
  9. String extension = fileName.substring(index + 1).toLowerCase();
  10. hm.put(extension, hm.getOrDefault(extension, 0) + 1);
  11. }
  12. }
  13. }
  14. return hm;
  15. }

在这个方法中,我们首先获取文件夹中所有文件的数组。然后,我们遍历这个数组,对于每个文件,我们获取其扩展名并将其转换为小写,然后将扩展名作为键,文件数量作为值存入HashMap中。如果listFiles()返回null,说明源文件不是一个目录或者发生了I/O错误,此时我们不进行任何操作。

统计文件大小

接下来,我们定义另一个方法getSize,该方法同样接收一个File对象作为参数,返回一个HashMap,其中键是文件类型的扩展名,值是该类型文件的总大小(以字节为单位)。

  1. public static HashMap<String, Long> getSize(File src) {
  2. HashMap<String, Long> sizeMap = new HashMap<>();
  3. File[] files = src.listFiles();
  4. if (files != null) {
  5. for (File file : files) {
  6. String fileName = file.getName();
  7. int index = fileName.lastIndexOf(".");
  8. if (index > 0) {
  9. String extension = fileName.substring(index + 1).toLowerCase();
  10. sizeMap.put(extension, sizeMap.getOrDefault(extension, 0L) + file.length());
  11. }
  12. }
  13. }
  14. return sizeMap;
  15. }

这个方法的工作原理与getCount类似,只是我们将文件的大小累加到对应的扩展名下。

GUI界面

在Java中,我们可以使用Swing库来创建图形用户界面(GUI)。Swing提供了一套丰富的组件,如按钮、文本框、表格等,可以用来构建交互式的应用程序。在本例中,我们将使用Swing来创建一个简单的GUI,用于显示文件夹中不同类型文件的数量和大小。

创建GUI框架

首先,我们需要创建一个窗口(JFrame)和一个面板(JPanel),用于放置我们的组件。我们还需要一个表格(JTable)来显示统计数据。

  1. import javax.swing.*;
  2. import javax.swing.table.DefaultTableModel;
  3. public class FileStatisticsGUI {
  4. private JFrame frame;
  5. private JTable table;
  6. private DefaultTableModel tableModel;
  7. public FileStatisticsGUI() {
  8. frame = new JFrame("文件统计");
  9. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  10. frame.setSize(400, 300);
  11. JPanel panel = new JPanel();
  12. frame.getContentPane().add(panel);
  13. panel.setLayout(new BorderLayout());
  14. tableModel = new DefaultTableModel();
  15. table = new JTable(tableModel);
  16. JScrollPane scrollPane = new JScrollPane(table);
  17. panel.add(scrollPane, BorderLayout.CENTER);
  18. frame.setVisible(true);
  19. }
  20. public static void main(String[] args) {
  21. SwingUtilities.invokeLater(() -> new FileStatisticsGUI());
  22. }
  23. }

更新表格数据

现在我们需要一个方法来更新表格的数据。我们将在表格中显示两列:一列是文件类型,另一列是对应的文件数量或大小。

  1. private void updateFileTypeTable(File folder) {
  2. HashMap<String, Integer> countMap = A03.getCount(folder);
  3. HashMap<String, Long> sizeMap = A03.getSize(folder);
  4. Object[][] data = new Object[countMap.size()][3];
  5. int index = 0;
  6. for (Map.Entry<String, Integer> entry : countMap.entrySet()) {
  7. String extension = entry.getKey();
  8. Integer count = entry.getValue();
  9. Long size = sizeMap.get(extension);
  10. data[index][0] = extension;
  11. data[index][1] = count;
  12. data[index][2] = size;
  13. index++;
  14. }
  15. String[] columnNames = {"文件类型", "数量", "总大小(字节)"};
  16. fileTypeTable.setModel(new DefaultTableModel(data, columnNames));
  17. }

Main方法

  1. import java.awt.*;
  2. public class Main {
  3. public static void main(String[] args) {
  4. EventQueue.invokeLater(() -> {
  5. Gui gui = new Gui();
  6. gui.setVisible(true);
  7. });
  8. }
  9. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/772688
推荐阅读
相关标签
  

闽ICP备14008679号