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

引言

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

准备工作

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

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

统计文件数量

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

public static HashMap<String, Integer> getCount(File src) {HashMap<String, Integer> hm = new HashMap<>();File[] files = src.listFiles();if (files != null) {for (File file : files) {String fileName = file.getName();int index = fileName.lastIndexOf(".");if (index > 0) {String extension = fileName.substring(index + 1).toLowerCase();hm.put(extension, hm.getOrDefault(extension, 0) + 1);}}}return hm;
}

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

统计文件大小

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

public static HashMap<String, Long> getSize(File src) {HashMap<String, Long> sizeMap = new HashMap<>();File[] files = src.listFiles();if (files != null) {for (File file : files) {String fileName = file.getName();int index = fileName.lastIndexOf(".");if (index > 0) {String extension = fileName.substring(index + 1).toLowerCase();sizeMap.put(extension, sizeMap.getOrDefault(extension, 0L) + file.length());}}}return sizeMap;
}

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

GUI界面

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

创建GUI框架

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

import javax.swing.*;
import javax.swing.table.DefaultTableModel;public class FileStatisticsGUI {private JFrame frame;private JTable table;private DefaultTableModel tableModel;public FileStatisticsGUI() {frame = new JFrame("文件统计");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(400, 300);JPanel panel = new JPanel();frame.getContentPane().add(panel);panel.setLayout(new BorderLayout());tableModel = new DefaultTableModel();table = new JTable(tableModel);JScrollPane scrollPane = new JScrollPane(table);panel.add(scrollPane, BorderLayout.CENTER);frame.setVisible(true);}public static void main(String[] args) {SwingUtilities.invokeLater(() -> new FileStatisticsGUI());}
}

更新表格数据

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

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

Main方法

import java.awt.*;public class Main {public static void main(String[] args) {EventQueue.invokeLater(() -> {Gui gui = new Gui();gui.setVisible(true);});}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/35342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++基本数据类型和计算(三)习题讲解

1.【单选题】 int a450; int main() { int a100; { int a 999; std::cout << a; } } A.999 B.100 C.450 解析&#xff1a;这道题考察作用域&#xff0c;本身遵守就近原则&#xff0c;所以选A。 2.【单选题】 int a; { int b 100; } ab<&l…

MySQL 基础概念

MySQL逻辑架构 MySQL 服务器逻辑架构图 最上层的服务并不是MySQL所独有的&#xff0c;大多数基于网络的客户端/服务器的工具或者服务都有类似的架构&#xff0c;比如连接管理、授权认证、安全等等。 大多数MySQL的核心服务都在第二层&#xff0c;包括查询解析、分析、优化、…

手持小风扇品牌有哪些?分享口碑最好的五款手持小风扇

手持小风扇在炎热的夏季成为了许多人解暑的好帮手。它们不仅轻便便携&#xff0c;随时随地都能为我们带来清凉和舒适。然而&#xff0c;市场上手持小风扇的品牌繁多&#xff0c;让人眼花缭乱。为了帮助大家做出更明智的选择&#xff0c;接下来我们将分享口碑最好的五款手持小风…

vscode关于java扩展

包含IDEA同款代码提示&#xff0c;vscode的debug&#xff0c;除了创建类要手动新建java文件以外&#xff0c;其他都还行&#xff0c;满足初学者要求。

Python+Pytest+Allure+Yaml接口自动化测试框架详解

PythonPytestAllureYaml接口自动化测试框架详解 编撰人&#xff1a;CesareCheung 更新时间&#xff1a;2024.06.20 一、技术栈 PythonPytestAllureYaml 版本要求&#xff1a;Python3.7.0,Pytest7.4.4,Allure2.18.1,PyYaml6.0 二、环境配置 1、安装python3.7&#xff0c;并配置…

C++编程逻辑讲解step by step:根据关键词自动判断文章的类别,去掉无关词后统计文章中每个单词出现的频率。

题目分析 根据关键词自动判断文章的类别。共2篇文章&#xff08;用char s1[]和char s2[]保存&#xff09;&#xff0c;去掉无关词后&#xff08;用char irrelevant[][10]保存&#xff09;&#xff0c;统计文章里面每个单词出现的频率&#xff1a;关键词个数去掉无关词后的文章…

前端JS必用工具【js-tool-big-box】学习,数值型数组的正向排序和倒向排序

这一小节&#xff0c;我们说一下前端 js-tool-big-box 这个工具库&#xff0c;添加的数值型数组的正向排序和倒向排序。 以前呢&#xff0c;我们的数组需要排序的时候&#xff0c;都是在项目的utils目录里&#xff0c;写一段公共方法&#xff0c;弄个冒泡排序啦&#xff0c;弄…

已解决java.security.GeneralSecurityException: 安全性相关的通用异常的正确解决方法,亲测有效!!!

已解决java.security.GeneralSecurityException: 安全性相关的通用异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 报错原因 解决思路 解决方法 确定具体异常类型 检查输入参数 验证算法支持性 调整安全策略 确保资源可…

uniapp 小程序 堆叠轮播图 左滑 右滑 自动翻页 点击停止自动翻页

uniapp 小程序 堆叠轮播图 左滑 右滑 自动翻页 点击停止自动翻页 超过指定时间未点击滑动 则继续开始滚动 直接上代码 componentSwiper.vue 需要注意页面切换时清除计时器 <template><view><view class"swiperPanel" touchstart"startMove"…

Verilog刷题笔记48——FSM1型异步复位

题目: 解题&#xff1a; module top_module(input clk,input areset, // Asynchronous reset to state Binput in,output out);// parameter A0, B1; reg state, next_state;always (*) begin // This is a combinational always block// State transition logiccase(…

VMware vSphere 8.0 Update 3 发布下载 - 企业级工作负载平台

VMware vSphere 8.0 Update 3 发布下载 - 企业级工作负载平台 vSphere 8.0U3 | ESXi 8.0U3 & vCenter Server 8.0U3 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-vsphere-8-u3/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&am…

【yolov8:报错AttributeError: ‘Segment‘ object has no attribute ‘detect‘】

今天在运行yolov8的Segment模式的val模型测验时报错&#xff1a; AttributeError: ‘Segment’ object has no attribute ‘detect’ 原因是yolov8的版本问题&#xff0c;更新至最新版就可以了&#xff1a; 输入ultralytics查看版本 卸载当前的老版本 然后下载最新版本就可以…

【前端】Vue项目和微信小程序生成二维码和条形码

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;我是前端菜鸟的自我修养&#xff01;今天给大家分享Vue项目和微信小程序如何生成二维码和条形码&#xff0c;介绍了JsBarcode、wxbarcode等插件&#xff0c;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01…

为什么要学Java?

想要自己教会自己java&#xff0c;从小白成长到架构师。实现硬实力就业&#xff01; 因为Java是全球排名第一的编程语言&#xff0c;Java工程师也是市场需求最大的软件工程师&#xff0c;选择Java&#xff0c;就是选择了高薪。 为什么Java应用最广泛&#xff1f; 从互联网到…

基于FreeRTOS+STM32CubeMX+LCD1602+MCP4141(SPI接口)的数字电位器Proteus仿真

一、仿真原理图: 二、运行效果: 三、软件部分: 1)、SPI读写: 2)、初始化部分: void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Initializes the CPU, AHB and APB busses clocks …

SQL连接与筛选:解析left join on和where的区别及典型案例分析

文章目录 前言数据库在运行时的执行顺序一、left join on和where条件的定义和作用left join on条件where条件 二、left join on和where条件的区别原理不同left join原理&#xff1a;where原理&#xff1a; 应用场景不同执行顺序不同&#xff08;作用阶段不同&#xff09;结果集…

Netty学习(二)——黏包半包、协议设计解析、聊天室

一、粘包与半包 1.1 粘包和半包复现 1、粘包复现&#xff1a; Server代码&#xff1a; public class ProblemServer {public static void main(String[] args) throws InterruptedException {new ServerBootstrap()//若是指定接收缓冲区大小&#xff1a;就会出现黏包、半包…

Python3 学习笔记——基本知识入门 | 菜鸟教程

Python3 学习笔记——基本知识入门 | 菜鸟教程 目录 Python3 学习笔记——基本知识入门 | 菜鸟教程基础知识标识符python保留字注释行与缩进多行语句数字(Number)类型字符串(String)空行等待用户输入同一行显示多条语句多个语句构成代码组print 输出import 与 from...import命令…

DDR3控制器(一)DDR3 IP调用

目录 一、DDR3 IP核简介 二、DDR3 IP核调用 在千兆以太网通信中用到了DDR3控制器&#xff0c;但是并没有对其做相关介绍。这次准备重新整理一下DDR3控制相关知识&#xff0c;复习巩固一下。 一、DDR3 IP核简介 MIG IP核&#xff08;Memory Interface Generator&#xff09;是…

气膜游泳馆建造成本要多少—轻空间

随着人们对健康生活的追求和游泳运动的普及&#xff0c;游泳馆的需求不断增加。传统游泳馆的建设周期长、成本高&#xff0c;而气膜游泳馆以其独特的优势成为一种新的选择。轻空间将详细分析气膜游泳馆的建造成本及其优势。 气膜游泳馆的基本结构 气膜游泳馆主要由以下几个部分…