任务描述
通过编写 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();
}
}
1412

被折叠的 条评论
为什么被折叠?



