【JavaEE初阶】文件IO(上)

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



目录

路径

绝对路径

相对路径

文件类型

文件的操作

File类

文件系统操作

创建文件,获取路径

删除文件

列出所有路径

路径修改

[创建目录 mkdir和mkdirs](#创建目录 mkdir和mkdirs)


服务器领域,机械硬盘仍然是一个主流的应用场景

机械硬盘在进行 顺序读写时,效率是相对比较高的,在进行 随机读写时,效率比较低

在一个电脑上,有很多文件,都是需要靠操作系统进行组织管理的(文件系统)

路径

文件系统上的目录结构 是一个"树形结构"(N叉树),基于这种结构,就可以找到某个文件在硬盘上的具体位置 ;

路径中,约定使用 分隔符,分割目录,

  • \(反斜杠) 在字符串中,必须通过\\转义字符去表示
  • /(斜杠): 绝大部分系统 都是使用/作为目录的分隔符,只有Windows两种都可以使用

路径 也可以认为是文件的一种 身份标识符(区分出唯一的一个文件)

表示路径的两种风格:绝对路径 和 相对路径

绝对路径

从盘符开始,一直到文件名结束

相对路径

相对路径有一个"参考系"("基准路径"或"工作路径"),如果基准目录不同,对应的相对路径也是不同的

  • .表示当前路径
  • ..表示上一路径

比如约定E:\code_java\java2024\j9_3_Thread为当前路径,要找到Demo3.java文件,其相对路径是 .\thread\Demo3.java

文件类型

文件类型分为 文本文件和二进制文件

文本文件里存储的所有内容都是"文本"(合法的字符),但是本质上内部存的还是二进制,只不过这些二进制数据都有据可查(通过字符集)

  • 针对文本文件,Java把文本文件读取出来的时候会自动查询码表,把二进制内容转成一个个字符
  • 二进制文件则没有上述的转换过程(word docx这个文件也是二进制文件)

文件的操作

包含两大类:文件系统操作(创建/删除文件 ,创建目录,重命名文件,判定文件存在)和 文件内容操作(读文件,写文件)

Java中提供了File类,进行文件系统操作,这个对象 会使用"路径"进行初始化,从而表示一个具体的文件(这个文件可以是存在的,也可以是不存在的)

File类

下面介绍File类的属性 ,构造方法 和方法

代码中写作 相对路径的基准目录取决于运行程序的方式:

  1. 直接在idea中运行,此时基准路径就是该项目所在的目录
  2. 在命令行中,通过Java命令运行,此时基准路径就是Java命令所处的目录
  3. 某个程序,可能是被其他进程调用的.进程1通过创建子进程的方式,运行进程2(虽然在java中很少见,但是可以做到)进程2的基准路径,就和进程1相同.
  4. 代码执行过程中,还可以通过一些api修改基准路径,改成我们指定的某个路径

文件系统操作

创建文件,获取路径

        File file = new File("C:\\用户\\1\\test.txt");
        System.out.println(file.getParent());
        System.out.println( file.getName());
        System.out.println(file.getPath());
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getCanonicalPath()); 

用相对路径在 该项目的 相对目录下创建文件

        File file = new File("./test.txt");//文件可以是不存在的
        Boolean ok=file.exists();
        System.out.println(ok);

        Boolean ok2=file.createNewFile();//表示在当前目录下创建一个test文件
        System.out.println(ok2);

        System.out.println(file.exists());
        System.out.println(file.isFile());
        System.out.println(file.isDirectory());

创建文件createNewFile时,很可能会抛出异常,有以下原因

  • 硬盘空间不够. 尤其是服务器,会存储很多数据(每天都会产生很多内容),会记录很多日志
  • 没有权限. 确保你具有的权限,才能进行,文件的权限,典型的两个:读和写

删除文件

deleteteOnExit表示进程结束后删除文件 ,存在的意义是可以用来构造"临时文件".

比如使用word创建一个文件,打开"显示隐藏文件",在word文档的同级目录下,存在一个临时文件(用于保存当前正在修改还没有真正保存的内容,程序异常关闭时,临时文件不会消失,而是通过这个文件还原出你正在编辑的内容),一旦你把编辑文档关闭了,这个隐藏文件就会自动消失.

直接使用list/listFiles 只能看到当前目录中的内容

列出所有路径

如果想看到某个目录下所有的目录和文件, 需要使用递归来完成(经典面试题)

import java.io.File;

public class Demo2_list {

    public static void scan(File currentDir){
        //判断是否是目录
        if(! currentDir.isDirectory()){
            return ;
        }

        //2.列出目录下的所有内容
        File[] files=currentDir.listFiles();
        if(files==null || files.length==0 ){
            return;//不存在的路径和 空目录返回
        }
        //3.打印当前目录的路径
        System.out.println(currentDir.getAbsolutePath());

        //4.遍历所有文件,是文件就打印,是目录 就继续递归
        for (File f:files) {
            if(f.isFile()){
                System.out.println(f.getAbsolutePath());
            }else{
                scan(f);
            }
        }
    }

    public static void main(String[] args) {
        File f=new File("./");
        scan(f);
    }
}

路径修改

文件路径的修改 也可以视为是一种"重命名",移动文件 就是修改文件所在的路径

import java.io.File;
import java.io.IOException;

public class Demo8 {
    public static void main(String[] args) throws IOException {
        File srcFile = new File("./abc1234/def");
        File destFile = new File("./def");
        srcFile.createNewFile();
        boolean ok = srcFile.renameTo(destFile);//将srcFile的名字改为destFile,
        System.out.println(ok);
    }
}

创建目录 mkdir和mkdirs

相关推荐
Mutig_s6 分钟前
如何理解MVCC
java·后端·mysql·面试
无理 Java15 分钟前
【技术解析】消息中间件MQ:从原理到RabbitMQ实战(深入浅出)
java·分布式·后端·rabbitmq·多线程·mq·消息中间件
菜鸟求带飞_25 分钟前
算法打卡:第十一章 图论part04
java·数据结构·算法·图论
iQM7529 分钟前
Spring Boot 2.x基础教程:实现文件上传
java·开发语言·spring boot·后端
pumpkin8451432 分钟前
Spring Boot 从 2.7.x 升级到 3.3注意事项
java·spring boot·后端
2402_8575834932 分钟前
蜗牛兼职网:Spring Boot框架应用
java·spring boot·后端
菜到极致就是渣33 分钟前
Java如何操作Elasticsearch
java·开发语言·elasticsearch
全栈学姐40 分钟前
springbootKPL比赛网上售票系统
java·vue.js·spring boot·后端
Ylucius41 分钟前
苍穹外卖学习日志 -----20天项目从零到完结-----含软件下载,环境配置,框架学习,代码编写,报错处理,测试联调,每日总结,心路历程等等......
java·spring boot·后端·学习·intellij-idea·mybatis·idea
蓝影铁哥42 分钟前
SpringBoot3核心特性-核心原理
android·java·数据库·spring boot