首页 > 编程语言 >Java File类详解(下)练习部分

Java File类详解(下)练习部分

时间:2023-12-07 19:31:46浏览次数:40  
标签:files Java File 文件夹 dir file public 详解


练习

第一题

需求:在当前模块下的aaa文件夹中创建一个a.txt文件

import java.io.File;
import java.io.IOException;

public class FileExer01 {
 public static void main(String[] args) throws IOException {
 File f1 = new File("AllInOne\\aaa");
 f1.mkdirs();

 File src = new File(f1, "a.txt");
 boolean flag = src.createNewFile();
 if (flag) {
 System.out.println("创建成功");
 }else {
 System.out.println("创建失败");
 }
 }
}


第二题

需求:定义一个方法找某一个文件夹中,是否有以avi结尾的电影。(暂时不需要考虑子文件夹)

D:\\aaa

D:\\aaa\\bbb

D:\\aaa\\ccc

import java.io.File;
import java.io.FileFilter;

public class AVIFinder {
 public static void main(String[] args) {
 // 需要查找的文件夹数组
 String[] paths = {"G:/", "G:\\虎胆龙威", "G:\\终结者2"};
 // 遍历路径数组
 for (String path : paths) {
 // 创建路径的File对象
 File f = new File(path);
 // 调用listFiles方法查找相应后缀名的文件
 File[] mkvFiles = f.listFiles(new FileFilter() {
 @Override
 public boolean accept(File pathname) {
 return pathname.isFile() && pathname.getName().endsWith(".mp4");
 }
 });
 System.out.println("=============路径:" + path + "下的文件:===================");
 // 输出文件夹下的mp4文件的路径
 for (File mkvFile : mkvFiles) {
 System.out.println(mkvFile.getAbsolutePath());
 }
 }
 }
}


第三题

需求:找到电脑中所有以avi结尾的电影。(需要考虑子文件夹)

C:\\

C:\\aaa

C:\\bbb

考虑递归

import java.io.File;

public class FileRecursion {

 public static void main(String[] args) {
 // 指定一个盘符
 File h = new File("h:/");
 listMKV(h);
 }

 /**
 * 列出文件夹中所有的MKV文件
 * @param dir 目录
 */
 public static void listMKV(File dir){
 // 如果是mkv文件就输出它的路径并结束
 if(dir.isFile()){
 if (dir.getName().endsWith(".mkv")){
 System.out.println(dir.getAbsolutePath());
 }
 }else {
 // 如果是目录,则列出所有文件
 File[] files = dir.listFiles();
 if (files != null) {
 for (File file : files) {
 // 递归
 listMKV(file);
 }
 }
 }
 }
}


第四题

需求:删除一个多级文件夹

import java.io.File;

/**
 * 删除一个多级目录
 */
public class FileDeletion {
 public static void main(String[] args) {
 File f = new File("H:\\test\\aaa");
 deleteDir(f);
 }

 public static void deleteDir(File dir){
 // 进入目录
 File[] files = dir.listFiles();
 if (files != null) {
 for (File file : files) {
 // 如果是文件,则删除
 if (file.isFile()){
 file.delete();
 }else {
 // 如果是文件夹,则递归
 deleteDir(file);
 }
 }
 // 最后,删除目录本身
 dir.delete();
 }
 }
}



第五题

需求:统计一个文件夹中每种文件的个数并打印。

①打印格式如下:

②txt:3个

③doc:4个

④jpg:6个


先导题:需求:统计一个文件夹的总大小

参考代码如下:

import java.io.File;

public class FileLenCount {
 public static void main(String[] args) {
 long len = 0;
 String dir = "G:\\JavaCode\\PuzzleGame";
 File f = new File(dir);
 len = countLen(f);
 System.out.println(len);
 }

 /**
 * 统计文件夹的总大小
 * @param dir 文件夹
 * @return 文件加大小(字节)
 */
 public static long countLen(File dir){
 long len = 0;
 // 列出目录中所有内容
 File[] files = dir.listFiles();
 if (files != null){
 for (File file : files) {
 // 1.如果是文件,统计其大小
 if (file.isFile()){
 len += file.length();
 }else {
 // 2. 如果是文件夹,则递归
 len += countLen(file);
 }
 }
 }
 return len;
 }
}

然后是统计各种文件类型数量的实现,使用Map存储,key为String类型表示文件扩展名,value为Integer类型,表示对应扩展名文件的数量。参考代码如下:

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

public class FileTypeCount {
 public static void main(String[] args) {
 long len = 0;
 String dir = "G:\\JavaCode\\PuzzleGame";
 File f = new File(dir);
 HashMap<String, Integer> hm = countTypeCount(f);
 System.out.println(hm);
 }

 /**
 * 统计文件夹的总大小
 * @param dir 文件夹
 * @return 文件加大小(字节)
 */
 public static long countLen(File dir){
 long len = 0;
 // 列出目录中所有内容
 File[] files = dir.listFiles();
 if (files != null){
 for (File file : files) {
 // 1.如果是文件,统计其大小
 if (file.isFile()){
 len += file.length();
 }else {
 // 2. 如果是文件夹,则递归
 len += countLen(file);
 }
 }
 }
 return len;
 }

 /**
 * 文件夹下文件类型的统计
 * @param dir 文件夹目录
 * @return
 */
 public static HashMap<String, Integer> countTypeCount(File dir){
 HashMap<String, Integer> hm = new HashMap<>();
 // 列出目录中所有内容
 File[] files = dir.listFiles();
 if (files != null){
 for (File file : files) {
 // 1.如果是文件,则统计其大小
 if (file.isFile()){
 // 获取后缀名。注意点.前面要加双斜线,因为split方法参数是regex正则,
 // 在正则中点号代码任意一个字符,所以需要转义
 String[] split = file.getName().split("\\.");
 if (split.length > 1){
 String typeName = split[split.length - 1];
 // 如果后缀名已有统计,则更新
 if (hm.containsKey(typeName)){
 hm.put(typeName, hm.get(typeName) + 1);
 }else {
 // 如果后缀名没有统计,则添加
 hm.put(typeName, 1);
 }
 }
 }else {
 // 2. 如果是文件夹,则递归
 HashMap<String, Integer> subMap = countTypeCount(file);
 // 获取子文件夹的统计,更新到hm中
 Set<Map.Entry<String, Integer>> entries = subMap.entrySet();
 for (Map.Entry<String, Integer> entry : entries) {
 // 如果hm中已含文件类型统计,则更新
 if (hm.containsKey(entry.getKey())){
 hm.put(entry.getKey(), hm.get(entry.getKey()) + entry.getValue());
 }
 // 如果hm中不含文件类型统计,则添加
 hm.put(entry.getKey(), entry.getValue());
 }
 }
 }
 }
 return hm;
 }
}







标签:files,Java,File,文件夹,dir,file,public,详解
From: https://blog.51cto.com/tangxiaohu/8727225

相关文章

  • Java编写单元测试用例
    Java编写单元测试用例01简介Java中可以使用多个测试框架来执行单元测试,其中最流行的测试框架之一是JUnit。下面是一个简单的示例,说明如何使用JUnit框架编写和执行单元测试:02一、JUnit包导入importorg.junit.*;03二、创建测试类这个类需要使用“@RunWith’和@Suite”注......
  • Java单元测试浅析(JUnit+Mockito)
    Java单元测试浅析(JUnit+Mockito)作者:京东物流秦彪1.什么是单元测试(1)单元测试环节:测试过程按照阶段划分分为:单元测试、集成测试、系统测试、验收测试等。相关含义如下:1)单元测试:针对计算机程序模块进行输出正确性检验工作。2)集成测试:在单元测试基础上,整合各个模......
  • java 单元测试之 - Spring框架提供的单元/集成测试注解
    java单元测试之-Spring框架提供的单元/集成测试注解Spring框架提供了很多注解来辅助完成单元测试和集成测试(备注:这里的集成测试指容器内部的集成测试,非系统间的集成测试),先看看Spring框架提供了哪些注解以及对应的作用。@RunWith(SpringRunner.class)/@ExtendWith(Spring......
  • Java Mockito 快速入门指南 Mock是指使用Mockito创建的模拟对象,它模拟真实对象的行为,
    JavaMockito快速入门指南Mock是指使用Mockito创建的模拟对象,它模拟真实对象的行为,用于替代真实对象的依赖项,以便进行独立的单元测试在软件开发中,单元测试对于确保代码的正确性和可靠性至关重要。Mockito是一个强大的Java测试框架,它提供了丰富的功能和方法,使得编写模拟测试变得......
  • UML学习详解
    一、用例图:描述角色以及角色与用例之间的连接关系。说明的是谁要使用系统,以及他们使用该系统可以做些什么。1.用例图的含义由参与者(Actor)、用例(UseCase)以及它们之间的关系构成的用于描述系统功能的动态视图称为用例图。要在用例图上显示某个用例,可绘制一个椭圆,然后将用例的......
  • Java基本数据类型转换
    1.Java基本数据类型转换1.1自动类型转换当Java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型这个就是自动类型转换数量类型按精度大小排序为:char<int<long<float<doublebyte<short<int<long<float<doubleinta='c';doubled=80注意:有多种类型......
  • Java数据类型
    1.数据类型每一种数据都定义了明确的数据类型,在内存中分配大小不同的内存空间(字节)8大基本数据类型整数类型:存放整数byte,1个字节short,2个字节int,4个字节(默认)long,8个字节浮点类型(小数)float,4个字节double,8个字节(默认)字符型:char,2个字节布尔型:boolean,1个字......
  • EF CodeFirst 数据注解特性详解
    数据注解特性是.NET特性,可以在EF或者EFCore中,应用于实体类上或者属性上进行生成数据表,并对表名、字段类型、长度、主键、是否为空、外键等进行设置。1、命名空间在EF6和EFCore中,数据注解特性包含在System.ComponentModel.DataAnnotations命名空间和System.ComponentModel.Dat......
  • java打包好的jar包在Linux服务器上指定端口并后台运行命令
    前提条件:a.已经在Linux服务器上安装了java环境。b.切换到jar包所在的目录下。c.运行方式为:java-jar运行。举例说明:包名  运行端口test.jar  8080命令如下:java-jar-Dserver.port=8080test.jar&>test.out&1解释:1.表示将test.jar这个jar包运行在8080端口(前提是端口......
  • java中禁用科学计数法的处理
    importjava.text.DecimalFormat;publicclassDisableScientificNotationExample{publicstaticvoidmain(String[]args){doublenumber=123456789.123456789;//创建DecimalFormat对象,设置输出格式DecimalFormatdecimalFormat=newD......