模拟文件管理器Java程序

简介

文件管理器是计算机系统中常见的应用程序之一,用于管理计算机中的文件和目录。它提供了对文件和目录的创建、复制、粘贴、重命名、删除等功能,帮助用户更方便地管理和操作文件系统。

本文将使用Java编写一个简单的模拟文件管理器程序,演示文件和目录的基本操作,帮助读者理解文件管理器的工作原理和实现方式。

程序设计

类设计

在Java中,我们可以使用File类来表示文件和目录。File类提供了一系列方法来操作文件和目录,比如创建、删除、重命名等。

在本程序中,我们将设计以下几个类:

  • FileManager:文件管理器类,负责用户交互和调用其他类的方法。
  • FileSystem:文件系统类,负责模拟文件系统的操作,比如创建文件、创建目录、复制文件等。
  • File:文件类,表示一个文件对象,包含文件名、文件大小等属性。
  • Directory:目录类,表示一个目录对象,包含目录名和包含的文件列表。

类关系图

以下是程序中各个类之间的关系图:

erDiagram
    FileManager ||.. FileSystem : 使用
    FileSystem ||-- File : 包含
    FileSystem ||-- Directory : 包含
    Directory ||-- File : 包含

程序示例

下面是程序的代码示例:

// FileManager.java
import java.util.Scanner;

public class FileManager {
    private FileSystem fileSystem;

    public FileManager() {
        fileSystem = new FileSystem();
    }

    public void start() {
        Scanner scanner = new Scanner(System.in);
        int choice;

        do {
            System.out.println("1. 创建文件");
            System.out.println("2. 创建目录");
            System.out.println("3. 复制文件");
            System.out.println("4. 删除文件");
            System.out.println("5. 重命名文件");
            System.out.println("0. 退出");

            System.out.print("请输入选项:");
            choice = scanner.nextInt();

            switch (choice) {
                case 1:
                    createFile();
                    break;
                case 2:
                    createDirectory();
                    break;
                case 3:
                    copyFile();
                    break;
                case 4:
                    deleteFile();
                    break;
                case 5:
                    renameFile();
                    break;
                case 0:
                    System.out.println("谢谢使用!");
                    break;
                default:
                    System.out.println("无效选项,请重新输入!");
            }
        } while (choice != 0);
    }

    private void createFile() {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入文件名:");
        String fileName = scanner.nextLine();

        System.out.print("请输入文件大小(单位:KB):");
        int fileSize = scanner.nextInt();

        File file = new File(fileName, fileSize);
        fileSystem.createFile(file);

        System.out.println("文件创建成功!");
    }

    private void createDirectory() {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入目录名:");
        String directoryName = scanner.nextLine();

        Directory directory = new Directory(directoryName);
        fileSystem.createDirectory(directory);

        System.out.println("目录创建成功!");
    }

    private void copyFile() {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入源文件名:");
        String sourceFileName = scanner.nextLine();

        System.out.print("请输入目标文件名:");
        String targetFileName = scanner.nextLine();

        fileSystem.copyFile(sourceFileName, targetFileName);

        System.out.println("文件复制成功!");
    }

    private void deleteFile() {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入文件名:");
        String fileName = scanner.nextLine();

        fileSystem.deleteFile(fileName);

        System.out.println("文件删除成功!");
    }

    private void renameFile() {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入原文件名:");
        String sourceFileName = scanner.nextLine();

        System.out.print("请输入新文件名:");
        String targetFileName = scanner.nextLine();

        fileSystem.renameFile(sourceFileName, targetFileName);

        System.out.println("文件重命名成功!");
    }

    public static void main(String[] args) {
        FileManager fileManager = new FileManager();
        fileManager.start();
    }
}

// FileSystem.java
import java.util.ArrayList;
import java.util.List;

public class FileSystem {
    private List<File> files;
    private List<Directory> directories;

    public FileSystem() {
        files = new ArrayList<>();
        directories = new ArrayList<>();
    }

    public void createFile(File file) {
        files.add(file);
    }

    public void