显示目录或文件的属性

任务描述

通过编写 Java 应用程序实现显示一个目录或文件的基本属性,掌握如下知识

  • Java.io.File 类的使用

  • 异常处理的运用

编程要求

1. 创建Java Application 项目,根包名称为项目名。

2. 功能要求

  • 从键盘输入一个字符串,表示一个目录名称或文件名称。

  • 如果该字符串对应的是一个目录的名称,则一个运行实例如下图,其中:

    • 目录大小是指:该目录中所有文件的大小之和(包含所有层次的子目录中的文件)

    • 包含文件和包含目录指:该目录中所有文件的个数或所有子目录个数(包含所有层次的子目录及其中的文件)

  • 如果该字符串是一个文件的名称,则一个运行实例如下图,其中:

    • 目标类型的括号中要根据文件的实际扩展名获取,如文件名中无扩展名,则显示: 文件(无)

  • 如果该字符串不是一个目录的名称也不是一个文件的名称,则一个运行实例如下图:

3. 程序结构要求

合理运用所学的面向对象方法编写。

提交说明

将所有源程序文件压缩成zip文件提交。直接把项目目录下的 src 目录压缩成 zip 文件即可。

测试说明

测试目录时不要输入某个磁盘或整个系统的根目录,如"D:"等。

package FileAttributeDemo;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileInfoUtil {
    private long totalSize;
    private int fileCount;
    private int dirCount;
    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    public void calculateDirInfo(File dir) {
        if (!dir.isDirectory() || dir.listFiles() == null) {
            return;
        }
        File[] files = dir.listFiles();
        for (File f : files) {
            if (f.isFile()) {
                totalSize += f.length();
                fileCount++;
            } else if (f.isDirectory()) {
                dirCount++;
                calculateDirInfo(f);
            }
        }
    }

    public String formatTime(long timeMillis) {
        return sdf.format(new Date(timeMillis));
    }

    public String getFileExtension(File file) {
        String name = file.getName();
        int dotIndex = name.lastIndexOf('.');
        if (dotIndex == -1 || dotIndex == name.length() - 1) {
            return "无";
        }
        return name.substring(dotIndex + 1);
    }

    public String getLocation(File file) {
        String parent = file.getParent();
        return parent == null ? file.getAbsolutePath().substring(0, 2) : parent;
    }

    public long getTotalSize() {
        return totalSize;
    }

    public int getFileCount() {
        return fileCount;
    }

    public int getDirCount() {
        return dirCount;
    }
}










package FileAttributeDemo;

import java.io.File;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("输入一个文件名或目录名: ");
        String path = scanner.nextLine().trim();
        File file = new File(path);
        FileInfoUtil util = new FileInfoUtil();

        if (!file.exists()) {
            System.out.println("[" + path + "]不是文件或目录名称!");
            scanner.close();
            return;
        }

        if (file.isDirectory()) {
            util.calculateDirInfo(file);
            System.out.println("目标名称:      " + file.getName());
            System.out.println("目标类型:      目录");
            System.out.println("所在位置:      " + util.getLocation(file));
            System.out.println("目录大小:      " + util.getTotalSize() + " 字节");
            System.out.println("修改时间:      " + util.formatTime(file.lastModified()));
            System.out.println("包含文件:      " + util.getFileCount() + " 个");
            System.out.println("包含目录:      " + util.getDirCount() + " 个");
            System.out.println("目标属性:");
            System.out.println("   可读:       " + file.canRead());
            System.out.println("   可写:       " + file.canWrite());
            System.out.println("   可运行:     " + file.canExecute());
            System.out.println("   隐藏:       " + file.isHidden());
        } else if (file.isFile()) {
            String ext = util.getFileExtension(file);
            System.out.println("目标名称:      " + file.getName());
            System.out.println("目标类型:      文件(_" + ext + ")");
            System.out.println("所在位置:      " + util.getLocation(file));
            System.out.println("文件大小:      " + file.length() + " 字节");
            System.out.println("修改时间:      " + util.formatTime(file.lastModified()));
            System.out.println("目标属性:");
            System.out.println("   可读:       " + file.canRead());
            System.out.println("   可写:       " + file.canWrite());
            System.out.println("   可运行:     " + file.canExecute());
            System.out.println("   隐藏:       " + file.isHidden());
        }
        scanner.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值