java IO流(一) File类

news2024/9/22 9:38:05

File对象只能对文件进行操作,不能操作文件中的内容。

1 File对象的创建
请添加图片描述

要注意的是:路径中"“要写成”\“进行转义, 路径中”/"可以直接用,但是最好的是使用File.separator,它会根据系统的不同进行转化,具有良好的移植性。

public static void main(String[] args) {
        // 1、创建一个File对象,指代某个具体的文件。
        // 路径分隔符
        // File f1 = new File("D:/resource/ab.txt");
        // File f1 = new File("D:\\resource\\ab.txt");
        File f1 = new File("D:" + File.separator +"resource" + File.separator + "ab.txt");
        System.out.println(f1.length()); // 文件大小

        File f2 = new File("D:/resource"); // 文件夹大小 注意不是文件夹里所有内容的大小 而是这个文件夹的大小
        System.out.println(f2.length()); // 文件夹本身只会记录这个文件夹的一些信息

        // 注意:File对象可以指代一个不存在的文件路径
        File f3 = new File("D:/resource/aaaa.txt");
        System.out.println(f3.length());
        System.out.println(f3.exists()); // false

        // 我现在要定位的文件是在模块中,应该怎么定位呢?
        // 绝对路径:带盘符的
        // File f4 = new File("D:\\code\\javasepromax\\file-io-app\\src\\itheima.txt");
        // 相对路径(重点):不带盘符,默认是直接去工程下寻找文件的。
        File f4 = new File("file-io-app\\src\\itheima.txt"); // 这里工程名是javasepromax所以相对路径这样写
        System.out.println(f4.length());
        
	    File f5 = new File("file-io-app\\src\\com\\tx\\www\\a.txt"); // 注意包中的路径是这样的
    }

2 File判断和获取方法

请添加图片描述

public static void main(String[] args) throws UnsupportedEncodingException {
        // 1.创建文件对象,指代某个文件
        File f1 = new File("D:/resource/ab.txt");
        //File f1 = new File("D:/resource/");

        // 2、public boolean exists():判断当前文件对象,对应的文件路径是否存在,存在返回true.
        System.out.println(f1.exists());

        // 3、public boolean isFile() : 判断当前文件对象指代的是否是文件,是文件返回true,反之。
        System.out.println(f1.isFile());

        // 4、public boolean isDirectory()  : 判断当前文件对象指代的是否是文件夹,是文件夹返回true,反之。
        System.out.println(f1.isDirectory());

		//除了判断功能还有一些获取功能:
		File f1 = new File("D:/resource/ab.txt");

		// 5.public String getName():获取文件的名称(包含后缀)
		System.out.println(f1.getName());
		
		// 6.public long length():获取文件的大小,返回字节个数
		System.out.println(f1.length());
		
		// 7.public long lastModified():获取文件的最后修改时间。
		long time = f1.lastModified();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		System.out.println(sdf.format(time));
		
		// 8.public String getPath():获取创建文件对象时,使用的路径
		File f2 = new File("D:\\resource\\ab.txt");
		File f3 = new File("file-io-app\\src\\itheima.txt");
		System.out.println(f2.getPath());
		System.out.println(f3.getPath());
		
		// 9.public String getAbsolutePath():获取绝对路径
		System.out.println(f2.getAbsolutePath());
		System.out.println(f3.getAbsolutePath());
    }

3 创建和删除方法

public static void main(String[] args) throws Exception {
        // 1、public boolean createNewFile():创建一个新文件(文件内容为空),创建成功返回true,反之。
        File f1 = new File("D:/resource/itheima2.txt");
        System.out.println(f1.createNewFile());

        // 2、public boolean mkdir():用于创建文件夹,注意:只能创建一级文件夹
        File f2 = new File("D:/resource/aaa");
        System.out.println(f2.mkdir());

        // 3、public boolean mkdirs():用于创建文件夹,注意:可以创建多级文件夹
        File f3 = new File("D:/resource/bbb/ccc/ddd/eee/fff/ggg");
        System.out.println(f3.mkdirs());

        // 3、public boolean delete():删除文件,或者空文件,注意:不能删除非空文件夹。
        System.out.println(f1.delete());
        System.out.println(f2.delete());
        File f4 = new File("D:/resource");
        System.out.println(f4.delete());
    }

要注意的是:

1.mkdir(): 只能创建单级文件夹、
2.mkdirs(): 才能创建多级文件夹
3.delete(): 文件可以直接删除,但是文件夹只能删除空的文件夹,文件夹有内容删除不了。

4 遍历文件夹方法
请添加图片描述

public static void main(String[] args) {
        // 1、public String[] list():获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。
        File f1 = new File("D:\\course\\待研发内容");
        String[] names = f1.list();
        for (String name : names) {
            System.out.println(name);
        }

        // 2、public File[] listFiles():(重点)获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
        File[] files = f1.listFiles();
        for (File file : files) {
            System.out.println(file.getAbsolutePath());
        }

        File f = new File("D:/resource/aaa");
        File[] files1 = f.listFiles();
        System.out.println(Arrays.toString(files1));
    }

要注意的是:

1.当主调是文件时,或者路径不存在时,返回null
2.当主调是空文件夹时,返回一个长度为0的数组
3.当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹路径放在File数组中,并把数组返回
4.当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在FIle数组中,包含隐藏文件
5.当主调是一个文件夹,但是没有权限访问时,返回null

5 递归文件搜索案例
案例需求:在D:\判断下搜索QQ.exe这个文件,然后直接输出并运行。

1.先调用文件夹的listFiles方法,获取文件夹的一级内容,得到一个数组
2.然后再遍历数组,获取数组中的File对象
3.因为File对象可能是文件也可能是文件夹,所以接下来就需要判断
判断File对象如果是文件,就获取文件名,如果文件名是QQ.exe则打印,否则不打印
判断File对象如果是文件夹,就递归执行1,2,3步骤
所以:把1,2,3步骤写成方法,递归调用即可。

	public static void main(String[] args) throws Exception {
    	searchFile(new File("D:/") , "QQ.exe");
    }

    /**
     * 去目录下搜索某个文件
     * @param dir  目录
     * @param fileName 要搜索的文件名称
     */
	public static void searchFile(File dir, String fileName) throws Exception {
        // 1、把非法的情况都拦截住
        if (dir == null || !dir.exists() || dir.isFile()) {
            return; // 代表无法搜索
        }

        // 2、dir不是null,存在,一定是目录对象。
        // 获取当前目录下的全部一级文件对象。
        File[] files = dir.listFiles();

        // 3、判断当前目录下是否存在一级文件对象,以及是否可以拿到一级文件对象。
        if (files == null || files.length == 0) return;

        // 4、遍历全部一级文件对象。
        for (File f : files) {
            // 5、判断文件是否是文件,还是文件夹
            if (f.isFile()) {
                // 是文件,判断这个文件名是否是我们要找的
                if (f.getName().contains(fileName)) {
                    System.out.println("找到了:" + f.getAbsolutePath());
                    Runtime runtime = Runtime.getRuntime();
                    runtime.exec(f.getAbsolutePath()); // 启动QQ
                }
            // 是文件夹,继续重复这个过程(递归)
            } else searchFile(f, fileName);
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/729067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ROS:分布式通信

目录 一、前言二、方案2.1准备2.2配置文件修改2.3配置主机IP2.4配置从机IP2.5测试 一、前言 ROS是一个分布式计算环境。一个运行中的ROS系统可以包含分布在多台计算机上多个节点。根据系统的配置方式,任何节点可能随时需要与任何其他节点进行通信。 因此&#xff…

小白开酒吧前要做好的三件事

一、进行市场调研当你有开酒吧的想法时,首先要做的第一步就是市场调研,进行市场调研可以让你了解到该地区酒吧市场是否良好,对未来的经营,有着决定成败的帮助,同时市场调研也可以让你了解到周边什么类型酒吧最受欢迎&a…

PMP证书有什么用,考试条件是什么?

很多关注项目经理岗位的朋友都知道,一些企业的招聘信息经常会发布,很多招聘项目经理岗/PMO岗的岗位要求中都会有一条:持有PMP/软考等证书的优先。 其实面试的时候,可能两个候选人的经历、经验、期望薪资都差不多,那么…

ESP32(掌控板) 图片显示与幻灯片

ESP32(掌控板) 图片显示与幻灯片 本程序通过按键改变变量的值,从而切换4组图片,通过触摸按键切换每组图片中的不同图片,同时按下两个按键开启幻灯片功能。 图形化程序如下 Arduino代码如下 /*!* MindPlus* mpython**…

sqoop笔记——一次从Hive到PostgreSql的数据迁移

写在开头 sqoop,想必进来围观的小伙伴们已经很熟悉了,笔者想把一些在实际使用sqoop过程中遇到的问题和注意事项记录并分析给大家,希望能帮助有需要的同学。随着对sqoop不断深入的了解,笔者会不断的以文章的形式记录并分析给大家&…

2023年05月份青少年软件编程Scratch图形化等级考试试卷二级真题(含答案)

2023-05 Scratch二级真题 题数:37 分数:100 测试时长:60min 一、单选题(共25题,共50分) 1.运行下列哪段程序,可以让狗狗走到木屋门口?( )(2分) A. B. C. D. 2.下列哪个选项…

陪诊软件源码|医院陪诊软件开发|陪诊师接单APP定制

陪诊小程序具有以下功能优势:   预约挂号:陪诊小程序可以提供在线预约挂号功能,患者可以通过小程序选择就诊时间、医生和科室,避免排队和等待时间,提高就医效率。   陪诊服务:陪诊小程序可以提供陪诊服…

SDN实训报告-基于SDN的Qos差分服务

1 实训概述 本次为期一周的实训旨在通过基于SDN架构的实现差分服务需求来提升我们的技能。我们在实训中广泛运用了一些重要的技术手段,包括Django、QOS、OpenDaylight和OpenvSwitch等。 在实训过程中,我们将重点放在SDN的基本操作上,通过实际…

Introduction to linear optimization exercise 第二章课后题答案 6-10

文章目录 2.62.7 2.6 解答: (a) 设 y y y 是 C C C 中的一点,多面体 Λ { ( λ 1 , … , λ n ) ∈ R n ∣ ∑ i 1 n λ i A i y , λ 1 , … , λ n ≥ 0 } \Lambda\left\{(\lambda_1, \dots, \lambda_n)\in R^n\mid \sum_{i1}^n \lambda_i\textb…

【企业架构设计模式】MITRE 设计模式

定义: 软件中的设计模式(通常)是简短的描述,用于捕捉过去证明是成功的实践。它们不是具体的软件,而是在某些情况下应用的一种模板。它们通常不是规定性的,而是建议性的,并且包括关于何时最适合使…

Vue组件库Element-常见组件-对话框

Dialog 对话框 在保留当前页面信息的状态下&#xff0c;直接弹出对话框&#xff0c;告知用户并承载相关操作 具体代码关键如下&#xff1a; <template><div><el-row><!-- button 按钮 --><el-button>默认按钮</el-button><el-button…

Windows下编译安装VTK

本文旨在记录在Windows下编译安装VTK的流程。 零、环境 操作系统Windows 10编译器Visual Studio 2019 CommunityCMake3.24.2 一、下载代码 git clone https://github.com/Kitware/VTK.git cd ./VTK/ git checkout -b v9.0.0 v9.0.0 二、编译安装 Where is the source cod…

Redis【实战篇】---- 用户签到

Redis【实战篇】---- 用户签到 1. 用户签到 - BitMap功能演示2. 用户签到 - 实现签到功能3. 用户签到 - 签到统计4. 额外加餐 - 关于使用BitMap来解决缓存穿透的方案 1. 用户签到 - BitMap功能演示 我们针对签到功能完全可以通过mysql来完成&#xff0c;比如说以下这张表 用户…

1.数据类型

1、课后作业 1.给同桌讲讲交换两个变量的值 算法&#xff08;不管他愿不愿听&#xff09; 2.依次咨询问并获取用户的姓名、年龄、性别&#xff0c;并打印用户信息 可以先自己写一下&#xff0c;在参考一下我的代码&#xff1a; <!DOCTYPE html> <html lang"en&q…

【SLAM14讲】05 李群与李代数

在 SLAM 中位姿是未知的&#xff0c;而我们需要解决什么样的相机位姿最符合当前观测数据这样的问题。 一种典型的方式是把它构建成一个优化问题&#xff0c;求解最优的 R, t&#xff0c;使得误差最小化。 旋转矩阵自身是带有约束的&#xff08;正交且行列式为 1&#xff09;。它…

Zhong__Linux系统磁盘空间扩容和转移

时间&#xff1a;2023.07.07 环境&#xff1a;Ubuntu/Centos 目的&#xff1a;分配闲置空间到指定分区/将分区空间转移到指定分区 说明&#xff1a; 作者&#xff1a;Zhong QQ交流群&#xff1a;121160124 欢迎加入&#xff01; 在安装Ubuntu/Centos/Stream等系统时 有时对…

测试3年经验不到,来面试开口要25K,面完连10K都不想给···

前言 近期公司发展的不错&#xff0c;打算扩招&#xff0c;也面试了不少人&#xff0c;由于公司不是很大所以公司大部分的人员都是我面试的。 前两天来了一个测试工作才3年不到的小伙儿面试&#xff0c;前面问了一点测试基础的东西&#xff0c;还是能答上来的&#xff0c;不过…

趟路:centos7.6安装opengauss5.0.0企业版

版本选取 # 下载opengauss安装介质&#xff0c;截止2023年7月份最新版本长期支持版&#xff08;LTS&#xff1a;Long Term Support&#xff09;是5.0.0版本&#xff1b;此外&#xff0c;还有预览版3.1.1&#xff1b;这里建议安装openGauss 5.0.0 (LTS)。企业版&#xff1a;更像…

Windows故障转移集群

Windows2012作为根域 两台Windows2008加入域 创建三台Windows 分别是Windows2012和两台Windows2008 并选择其环境 创建三个十g的卷&#xff0c;连接至Windows2012 清理三台主机的后台数据 然后修改三台主机的IP 本机IP要相对应 Windows2008-1主机IP 第二块网卡不需要填写网…

液滴接触角边界曲线识别—巧用Ovito

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 更 多 \color{blue}{多} 多 精 \color{orange}{精} 精 彩 \color{green}{彩} 彩&#xff01; 主要专栏内容包括&#xff1a; †《LAMMPS小技巧》&#xff1a; ‾ \textbf…