栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

2022-08-08 第五小组 顾祥全 学习笔记 day31-File类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2022-08-08 第五小组 顾祥全 学习笔记 day31-File类

学习内容
    • File类
      • 相对路径与绝对路径
      • 非空目录的删除
      • 带目录的文件的创建
      • 文件或目录的拷贝
      • 编写一个简易的cmd

File类

file是什么? —> 文件和目录路径名的抽象表示形式

  1. 包路径:java.io.File
  2. 继承关系:File —> Object
  3. 构造方法

    4.方法


常用方法

方法功能
String getPath()
String getAbsolutePath()
String getCanonicalPath()
将此抽象路径名转换为一个路径名字符串(获取构建路径)
返回此抽象路径名的绝对路径名字符串(获取 当前路径1 + 构建路径)
返回此抽象路径名的规范路径名字符串。(如果构建目录包括".“或”.."时,会进行规范处理)
boolean isFile()
boolean isDirtory()
当且仅当此抽象路径名表示的文件存在且 是一个标准文件时,返回 true;否则返回 false
当且仅当此抽象路径名表示的文件存在且 是一个目录时,返回 true;否则返回 false
在不知道file是否存在时,不要使用这两个方法来判断file是否是文件/目录
,因为当一个文件不存在时这个文件既不是文件也不是目录
在file不存在时,想要判断file路径是文件还是目录,建议自己写一个方法来判断。
boolean delete()可以删除文件以及空目录,不能删除带有内容的目录(带有目录或带有文件的目录)
boolean createNewFile()如果文件存在,则不会不会创建也不会覆盖;如果文件不存在则创建文件
boolean mkdir()
boolean mkdirs()
如果目录存在,则不会创建也不会覆盖,如果目录不存在则创建目录
如果file是一个多级目录使用mkdir()会创建失败,返回false
相对路径与绝对路径

在java中,盘符后面的“”不能省略,???

非空目录的删除 带目录的文件的创建 文件或目录的拷贝
package com.jsoft.io;

import org.junit.Test;
import java.io.*;
public class Demo01 {
	
    public static boolean copyFile(File copyFile,File destDir) throws IOException {
        // 如果路径不存在
        if(!copyFile.exists() || !destDir.exists()) {
            System.out.println("找不到的路径,请检查被拷贝文件或目录与拷贝目录是否存在");
            return false;
        }
        // 如果destDir不是一个目录
        if(!destDir.isDirectory()) {
            System.out.println("拷贝位置不是一个目录,无法拷贝");
            return false;
        }

        // 如果是文件拷贝并终止
        if(copyFile.isFile()) {
          try(FileInputStream in = new FileInputStream(copyFile);
              FileOutputStream out = new FileOutputStream(new File(destDir + File.separator + copyFile.getName()));) {

              // 一次读完(不建议使用)
              int readCount;
              byte[] bytes = new byte[in.available()];
              readCount = in.read(bytes);
              out.write(bytes);
          }
          return true;
        }

        // 如果是目录,拷贝目录
        if(copyFile.isDirectory()) {
            // 创建目录
            File tempFile = new File(destDir.getCanonicalPath() + File.separator + copyFile.getName());
            tempFile.mkdir();
            // 获取当前目录下的所有file
            File[] files = copyFile.listFiles();
            for (File file : files) {
                File newDestDir = new File(tempFile.getCanonicalPath());
                // 递归拷贝
                copyFile(file,newDestDir);
            }
        }

        return true;
    }

    @Test
    public void testFile() throws IOException {
        File srcFile = new File("D:\桌面\a");
        // 如果路径是在盘符的根下,必须在盘符后面加“”
        File destFile = new File("E:\");
        System.out.println(copyFile(srcFile, destFile) ? "拷贝成功!" : "拷贝失败!");
    }
}
编写一个简易的cmd
package com.jsoft.io.file;

import org.junit.Test;

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

public class CMD {
    private static String currentDir;  // 当前目录路径
    private static Scanner sc;

    static {
        currentDir = System.getProperty("user.dir");
        sc = new Scanner(System.in);
    }

    // 切换路径
    private static boolean cd(String userIn) throws IOException {
        String[] split = userIn.split(" ");
        if(split.length != 2) {
            System.out.println("格式错误");
            return false;
        }
        // 获取目录名
        String dirName = split[1];

        // 当前路径(currentDir)+相对路径
        File file = new File(currentDir + "\" + dirName);
        // 如果是绝对路径
        if(dirName.contains(":")) {
            file = new File(dirName);
        }

        // 切换当前目录
        if(".".equals(dirName)) {
            return true;
        }
        // 切换到上级目录
        if("..".equals(dirName)) {

            File fatherFile = new File(currentDir).getParentFile();
            if(fatherFile == null) {
                return false;
            }
            currentDir = fatherFile.getCanonicalPath();
            return true;
        }

        // 如果不是目录
        if(isFile(file)) {
            System.out.println("目录名称无效");
            return false;
        }

        // 如果文件不存在
        if(!file.exists()) {
            System.out.println("系统找不到指定的路径。");
            return false;
        }

        // 文件存在
        currentDir = file.getCanonicalPath();
        return true;

    }

    // 创建文件或目录
    private static boolean md(String userIn) throws IOException {
        String[] split = userIn.split(" ");
        String cdContent = split[1];
        File file = new File(currentDir + "\" + cdContent);

        // 如果是绝对路径
        if(cdContent.contains(":")) {
            file = new File(cdContent);
        }

        // 如果是文件(目前不能处理带目录的文件)
        if(isFile(file)) {
            file.createNewFile();
        } else {
            file.mkdirs();
        }
        return true;

    }



    // 打印当前路径中的所有文件目录信息
    private static void dir() {
        File[] files = new File(currentDir).listFiles();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
        long byteNum = 0;

        if(files.length == 0) {
            System.out.println("当前目录为空");
            return;
        }
        // 此处并未统计文件夹所占字节大小
        for(File file : files) {
            byteNum += file.length();
            StringBuilder sb = new StringBuilder();
            sb.append(sdf.format(new Date(file.lastModified())));
            sb.append("t");
            sb.append(file.isDirectory() ? "" : "t");
            sb.append("t");
            sb.append(file.length());
            sb.append("t");
            sb.append(file.getName());
            System.out.println(sb);
        }
        System.out.println(files.length + " 个文件");
        System.out.println(byteNum + " 字节");

    }

    private static boolean rd(String userIn) throws IOException {
        String[] split = userIn.split(" ");
        String rdContent = split[1];

        File file = new File(currentDir + "\" + rdContent);

        // 如果是绝对路径
        if(rdContent.contains(":")) {
           file = new File(rdContent);
        }

        // 如果是文件
        if (isFile(file)) {
            file.delete();
            return true;
        } else {
            // 暂不支持对多级文件夹以及非空文件夹的删除
            file.delete();
            return true;
        }
    }


    // 获取用户键入
    private static String commindLine() {
        System.out.print(currentDir + ">");
        return sc.nextLine();
    }

    // 显示帮助信息
    private static void help() {
        // cd
        StringBuilder sb = new StringBuilder();
        sb.append("cd命令");
        sb.append("n");
        sb.append("语法格式:cd 文件路径");
        sb.append("t");
        sb.append("改变当前目录(支持相对路径和绝对路径)");
        System.out.println(sb);
        System.out.println("---------------------------------------");
        // dir
        sb = new StringBuilder();
        sb.append("dir命令");
        sb.append("t");
        sb.append("未实现功能:查询目录中所占字节大小,统计文件和目录的个数,对./..显示");
        sb.append("n");
        sb.append("语法格式:dir");
        sb.append("t");
        sb.append("列出当前目录的所有文件");
        System.out.println(sb);
        System.out.println("---------------------------------------");

        // md
        sb = new StringBuilder();

        sb.append("md命令");
        sb.append("t");
        sb.append("未实现功能:创建带目录的文件");
        sb.append("n");
        sb.append("语法格式:md 文件路径");
        sb.append("t");
        sb.append("创建文件(支持相对路径和绝对路径)");
        System.out.println(sb);
        System.out.println("---------------------------------------");

        // rd
        sb = new StringBuilder();
        sb.append("rd命令");
        sb.append("t");
        sb.append("未实现功能:对非空目录的删除");
        sb.append("n");
        sb.append("语法格式:rd 文件路径");
        sb.append("t");
        sb.append("删除文件(支持相对路径和绝对路径)");
        System.out.println(sb);
        System.out.println("---------------------------------------");
        sb = new StringBuilder();
        sb.append("exit");

        sb.append("t");
        sb.append("退出cmd");
        System.out.println(sb);
        System.out.println("---------------------------------------");


    }

    // 判断File是否是文件,当路径中包含“.”时,我们认为这个file是一个文件(并不严谨) 
    private static boolean isFile(File file) throws IOException {
        // 当路径中存在.时,我们认为这个File是一个文件
        if(file.getCanonicalPath().contains(".")) {
            return true;
        }
        return false;
    }

    public static void main(String[] args) throws IOException {


        System.out.println("Microsoft Windows [版本 10.0.18363.1556]n" +
                "(c) 2019 Microsoft Corporation。保留所有权利。n");
        System.out.println("输入help查看帮助信息nn");

        while(true) {
           // 获取用户键入
           String userIn = commindLine();

           if(userIn.startsWith("cd")) {
                cd(userIn);
           } else if("dir".equals(userIn)) {
               dir();
           } else if(userIn.startsWith("md")) {
               md(userIn);
           } else if(userIn.startsWith("rd")) {
               rd(userIn);
           }else if("help".equals(userIn)) {
               help();
           }else if("exit".equals(userIn)) {
               break;
           } else {
               System.out.println(userIn + "不是内部或外部命令,也不是可运行的程序或批处理文件。");
           }
       }

    }

}


  1. 在java中,当前路径默认是project(项目)的根 ↩︎

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1038969.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号