【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

相关推荐
customer081 分钟前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
全栈开发圈3 分钟前
新书速览|Java网络爬虫精解与实践
java·开发语言·爬虫
WaaTong5 分钟前
《重学Java设计模式》之 单例模式
java·单例模式·设计模式
面试鸭7 分钟前
离谱!买个人信息买到网安公司头上???
java·开发语言·职场和发展
沈询-阿里1 小时前
java-智能识别车牌号_基于spring ai和开源国产大模型_qwen vl
java·开发语言
AaVictory.1 小时前
Android 开发 Java中 list实现 按照时间格式 yyyy-MM-dd HH:mm 顺序
android·java·list
LuckyLay1 小时前
Spring学习笔记_27——@EnableLoadTimeWeaving
java·spring boot·spring
向阳12182 小时前
Dubbo负载均衡
java·运维·负载均衡·dubbo
Gu Gu Study2 小时前
【用Java学习数据结构系列】泛型上界与通配符上界
java·开发语言