当前位置: 首页 > article >正文

【JavaEE初阶】文件IO(上)

欢迎关注个人主页:逸狼


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

如有错误,欢迎指出~



目录

路径

绝对路径

相对路径

文件类型

文件的操作

 File类

文件系统操作

创建文件,获取路径

删除文件 

列出所有路径 

路径修改 

创建目录 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 


http://www.kler.cn/a/316235.html

相关文章:

  • 图论-代码随想录刷题记录[JAVA]
  • 算法——长度最小的子数组(leetcode209)
  • arcgis做buffer
  • 〔 MySQL 〕数据类型
  • 浅谈:基于三维场景的视频融合方法
  • 鸿蒙学习基本概念
  • 阿里云kafka消息写入topic失败
  • 【Nginx】Nginx 使用 SSL 的详细指南
  • 内核是如何发送数据包
  • Python国产新 ORM 框架 fastzdp_sqlmodel 快速入门教程
  • AI时代保持并提升自身的核心竞争力
  • 常⻅中间件漏洞(WebLogic)靶场
  • 树莓派pico上手
  • 构建高可用和高防御力的云服务架构第五部分:PolarDB(5/5)
  • 今日leetCode 反转字符串
  • 第二证券:股价为什么出现大跌?股价大跌时怎么办?
  • 网安开发:杭州某科技银行面经和答案
  • 轻松获取京东商品信息:商品详情API接口使用教程
  • 关系数据库和非关系数据库
  • 信息安全数学基础(15)欧拉定理
  • 8--SpringBoot原理分析、注解-详解(面试高频提问点)
  • 【Python机器学习】NLP信息提取——值得提取的信息
  • Fyne ( go跨平台GUI )中文文档- 扩展Fyne (七)
  • 是什么推动了今年CSP-J/S报名人数的再创新高?
  • 【AI创作组】Matlab绘图基础之plot函数
  • [Redis][String][上]详细讲解