第二十四章——文件管理的代码保存

这是关于文件的增删改查代码的记录:

package com.maya.hanqi.filemanager;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class TestFileManager {

    private static Map<String, File> fileMap = new HashMap<String, File>();

    private static boolean lock = true;

    public static void main(String[] args) {
        Scanner scanner = null;
        while (lock) {
            showContent();
            scanner = new Scanner(System.in);
            System.out.println("1---在选定的目录下创建文件夹");
            System.out.println("2---将选定的文件改名");
            System.out.println("3---将选定的文件删除");
            System.out.println("4---将选定的文件复制到另一个路径");
            System.out.println("5---退出");
            String console = scanner.nextLine();
            if ("1".equals(console)) {
                System.out.println("想在哪个文件夹下创建 ?");
                String path = scanner.nextLine();
                System.out.println("输入新文件夹的名字...");
                String folderName = scanner.nextLine();
                createFolder(path, folderName);
            }
            if ("2".equals(console)) {
                System.out.println("说 ! 改谁 ?");
                String fname = scanner.nextLine();
                System.out.println("改成什么 ?");
                String targetName = scanner.nextLine();
                renameFile(fname, targetName);
            }
            if ("3".equals(console)) {
                System.out.println("又看谁不顺眼了啊 ?");
                String fname = scanner.nextLine();
                deleteFile(fname);
            }
            if ("4".equals(console)) {
                System.out.println("复制哪个 ?");
                String fname = scanner.nextLine();
                System.out.println("复制到哪里 ?");
                String targetPath = scanner.nextLine();
                copyFile(fname, targetPath);
            }
            if ("5".equals(console)) {
                lock = false;
                System.err.println("系统已经退出 !");
            }
        }
        scanner.close();
    }

    public static void showContent() {
        File file = new File("E:\\java\\folder");
        System.out.println(file.getName());
        fileMap.put(file.getName(), file);
        factFile(file, 1);
    }

    public static void copyFile(String fname, String targetPath) {
        File file = fileMap.get(fname);
        BufferedReader br = null;
        BufferedWriter bw = null;
        String sc = null;
        if (!(file == null)) {
            if (fileMap.get(targetPath).isDirectory()) {
                try {
                    File newFile = new File(fileMap.get(targetPath).getPath() + "\\" + fname);
                    br = new BufferedReader(new FileReader(fileMap.get(fname)));
                    bw = new BufferedWriter(new FileWriter(newFile));
                    while ((sc = br.readLine()) != null) {
                        bw.write(sc);
                    }
                    br.close();
                    bw.close();
                    System.err.println("文件复制成功 !");
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else {
                System.err.println("目标路径不是文件夹, 不能复制 !");
                return;
            }
        } else {
            System.err.println("输入的路径不存在 !");
        }
    }

    public static void deleteFile(String fname) {
        File file = fileMap.get(fname);
        if (!(file == null)) {
            if(file.listFiles().length > 0) {
                System.err.println("不是空文件夹, 无法删除 !");
                return;
            }
            file.delete();
            fileMap.remove(fname);
            System.err.println("文件已删除 !");
        } else {
            System.err.println("输入的路径不存在 !");
        }
    }

    public static void renameFile(String fname, String targetName) {
        File file = fileMap.get(fname);
        if (!(file == null)) {
            File newFile = new File(file.getParentFile().getPath() + "\\" + targetName);
            file.renameTo(newFile);
            System.out.println("文件名已经更改 !");
        } else {
            System.err.println("输入的路径不存在 !");
        }
    }

    public static void createFolder(String address, String folderName) {
        File file = fileMap.get(address);
        if (!(file == null)) {
            File newFile = new File(file.getPath() + "\\" + folderName);
            if (newFile.mkdirs()) {
                System.err.println("文件夹成功创建");
            } else {
                System.err.println("创建文件夹失败");
            }
        } else {
            System.err.println("输入的路径不存在 !");
        }
    }

    public static void console(int k) {
        for (int a = 0; a < k; a++) {
            System.out.print("   ");
        }
    }

    public static void factFile(File file, int length) {
        if (file.exists() && file.isDirectory()) {
            File[] fs = file.listFiles();
            for (int i = 0; i < fs.length; i++) {
                console(length);
                System.out.println(fs[i].getName());
                factFile(fs[i], length + 1);
                fileMap.put(fs[i].getName(), fs[i]);
            }
        }
    }
}
时间: 2024-08-29 22:23:00

第二十四章——文件管理的代码保存的相关文章

Gradle 1.12用户指南翻译——第二十四章. Groovy 插件

其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/userguide/userguide.html. 另外,Android 手机用户可通过我写的一个程序浏览文档,带缓存功能的,兼容

【WPF学习】第二十四章 基于范围的控件

原文:[WPF学习]第二十四章 基于范围的控件 WPF提供了三个使用范围概念的控件.这些控件使用在特定最小值和最大值之间的数值.这些控件--ScrollBar.ProgressBar以及Slider--都继承自RangeBase类(该类又继承自Control类).尽管它们使用相同的抽象概念(范围),但工作方式却又很大的区别. 下表显示了RangeBase类定义的属性: 表 RangeBase类的属性 通常不比直接使用ScrollBar控件.更高级的ScrollViewer控件(封装了两个Scro

第二十四章

希言自然.飘风不终朝,骤雨不终日.孰为此?天地,天地而弗能久,又况于人乎?故从事而道者同于道,德者同于德,失者同于失.同于德者,道亦德之.同于失者,道亦失之. 第二十四章1 为何盛世的领导者很少有丰功伟绩? 各位朋友大家好,今天我们接着来聊<道德经>.前边大家的留言我都看了,写的感想我也看了,我真的没想到大家感想写的这么好.而且这个<道德经>给大家带来这么多的变化.这么多的提升,让我特别开心,真的非常感动.我自己在讲<道德经>的过程中,说实话我自己也在不断地提升.也在学

C#图解教程 第二十四章 反射和特性

反射和特性元数据和反射Type 类获取Type对象什么是特性应用特性预定义的保留的特性Obsolete(废弃)特性Conditional特性调用者信息特性DebuggerStepThrough 特性其他预定义特性有关应用特性的更多内容多个特性其他类型的目标全局特性自定义特性声明自定义特性使用特性的构造函数指定构造函数使用构造函数构造函数中的位置参数和命名参数限制特性的使用自定义特性的最佳实践访问特性使用IsDefined方法使用GetCustomAttributes方法 Note 类的元数据包含

【读书笔记】C#高级编程 第二十四章 文件和注册表操作

(一)文件和注册表 对于文件系统操作,相关的类几乎都在System.IO名称空间中,而注册表操作由System.Win32名称空间中的类来处理. (二)管理文件系统 System.MarshalByRefObject--这是.NET类中用于远程操作的基对象类,它允许在应用程序域之间编组数据. FileSystemInfo--这是表示任何文件系统对象的基类. FileInfo和File--这些类表示文件系统上的文件. DirectoryInfo和Directory--这些类表示文件系统上的文件夹.

第二十四章 重构

重构简介 重构定义: 在不改变软件外部行为的前提下,对其内部结构进行改变,使之更容易理解以便于修改: 尽可能地将一个程序分解为多个组成部分. 重构的理由 代码重复: 冗长的子程序: 循环过长或嵌套过深: 类的接口未能提供层次一致的抽象: 拥有太多参数的参数列表: 类的内部修改往往被局限于某个部分: 变化导致对多个类的相同修改: 对继承体系的同样修改: case语句需要做相同的修改: 同时使用的相关数据并未以类的方式进行组织: 成员函数使用其他类的特征比使用自身类的特征还要多: 过多使用基本数据类

第二十四章 C++11特性之右值引用

右值引用,是 C++11 语言核心中最为重要的改进之一.右值引用给 C++ 带来了“Move语义”(“转移语义”),同时解决了模板编程中完美转发的问题(Perfect forwarding).右值引用使 C++ 对象有能力甄别什么是(可以看作)临时对象,对于临时对象的拷贝可以做某种特别的处理,一般来说主要是直接传递资源的所有权而不是像一般地进行拷贝,这就是所谓的 move 语义了.完美转发则是指在模板编程的时候,各层级函数参数传递时不会丢失参数的“属性”(lvalue/rvalue, const

c++程序设计原理与实践 第二十四章部分答案

1 double f(double& d) 2 { 3 d*=2; 4 return d; 5 } 6 7 void f1(double&d) 8 { 9 d*=2; 10 } 11 12 double f2(double& d) 13 { 14 d*=2; 15 return d; 16 } 习题1 1 class f3{ 2 int i; 3 public: 4 f3(int i1):i(i1){} 5 //double operator()(double d){return

WP8.1学习系列(第二十四章)——Json解析

.net已经集成了json解析,类名叫DataContractJsonSerializer DataContractJsonSerializer 类型公开以下成员. 构造函数   名称 说明 DataContractJsonSerializer(Type) 初始化 DataContractJsonSerializer 类的新实例,以便序列化或反序列化指定类型的对象. DataContractJsonSerializer(Type, IEnumerable<Type>) 初始化 DataCont