File类、方法递归

news2024/11/29 11:39:28

File:代表文本

IO流:读写数据

1、 File 类构建对象的方式是什么样的? File 的对象可以代表哪些东西?

注意
· File 对象既可以代表文件、也可以代表文件夹。
● File 封装的对象仅仅是一个路径名,这个路径可以是存在的,也允许是不存在 。

2、绝对路径和相对路径是什么意思?

.绝对路径:从盘符开始
 File file1 = new File (" D :\\ xinbao \\ a . txt ");
.相对路径:不带盘符,默认直接到当前工程下的目录寻找文件。
 File file3= new File ("模块名\\ a . txt ");

创建对象

package com.xinbao.d1_file;

import java.io.File;

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

            File f2 = new File("C:\\Users\\86182\\Desktop");
            System.out.println(f2.length());

            //File对象可以指代一个不存在的文件路径
            File f3 = new File("C:\\Users\\86182\\Desktop\\c+++++.txt");
            System.out.println(f3.length());
            System.out.println(f3.exists());

            //如果要定位的文件在模块中,应该怎么定位呢?
            //绝对路径:带盘符的
            //File f4 = new File("E:\\JVsoft\\file-io-app\\src\\com\\xinbao\\d1_file\\xinbao");
            //相对路径:不带盘符,默认直接去工程下寻找文件
            File f4 = new File("com\\xinbao\\d1_file\\xinbao");
            System.out.println(f4.length());

        }

}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=13344:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\file-io-app FileTest1
5179
16384
0
false
6

进程已结束,退出代码为 0
方法
判断文件类型,获取文件信息

package com.xinbao.d1_file;

import java.io.File;
import java.text.SimpleDateFormat;

public class FileTest2 {
    public static void main(String[] args) {
        //1、创建文件对象,指代某个文件
        File f1 = new File("E:\\JVsoft\\file-io-app\\src\\com\\xinbao\\d1_file\\xinbaby");
        File f2 = new File("E:\\JVsoft\\file-io-app\\src\\com\\xinbao\\d1_file");
        File f3 = new File("E:\\JVsoft\\file-io-app\\src\\com\\xinbao\\d1_file\\xinbao");

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

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

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

        //5、获取文件名称(包括后缀)'
        System.out.println(f1.getName());//xinbaby

        //6、获取文件大小,返回字节数
        System.out.println(f3.length());

        //7、获取文件的最后修改时间
        long time = f3.lastModified();
        SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(date.format(time));

        //8、获取创建文件对象时,使用的路径
        File f4 = new File("E:\\fpga\\课程设计\\I型指令设计.ppt");
        File f5 = new File("file-io-app\\src\\com\\xinbao\\d1_file");
        System.out.println(f4.getPath());
        System.out.println(f5.getPath());

        //9、获取绝对路径
        System.out.println(f4.getAbsolutePath());
        System.out.println(f5.getAbsolutePath());
    }
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=13622:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\file-io-app com.xinbao.d1_file.FileTest2
false
true
true
true
xinbaby
8
2023-10-29 22:38:25
E:\fpga\课程设计\I型指令设计.ppt
file-io-app\src\com\xinbao\d1_file
E:\fpga\课程设计\I型指令设计.ppt
E:\JVsoft\api-app3-3\file-io-app\src\com\xinbao\d1_file

进程已结束,退出代码为 0
创建,删除文件、文件夹 

package com.xinbao.d1_file;

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

public class FileTest3 {
    public static void main(String[] args) throws Exception {
        //1、创建一个新文件(文件内容为空),创建成功返回true,反之
        File f1 = new File("E:/JVsoft/luluxiao.txt");
        System.out.println(f1.createNewFile());//IOException,害怕E盘不存在,throw出去

        //2、创建文件夹,注意:只能创建一级文件夹
        File f2 = new File("E:/JVsoft/luluxiao");
        File f3 = new File("E:/JVsoft/pape/mark");
        System.out.println(f2.mkdir());
        System.out.println(f3.mkdir());//false 多级

        //3、创建文件夹,注意:可以创建多级文件夹
        File f4 = new File("E:/JVsoft/pp/bk/pp");
        System.out.println(f4.mkdirs());

        //4、删除文件,或者空文件夹,注意:不能删除非空文件夹
        System.out.println(f1.delete());//非空文件
        File f5 = new File("E:/JVsoft/pp");
        System.out.println(f5.delete());//非空文件夹
        System.out.println(f2.delete());//空文件夹
    }
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=8822:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\file-io-app com.xinbao.d1_file.FileTest3
true
true
false
false
true
false
true

进程已结束,退出代码为 0
遍历文件夹 

使用 listFiles 方法时的注意事项:
.当主调是文件,或者路径不存在时,返回 null 
.当主调是空文件夹时,返回一个长度为0的数组
.当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在 File 数组中返回
.当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在 File 数组中返回,包含隐藏文件 

.当主调是一个文件夹,但是没有权限访问该文件夹时,返回 null 

package com.xinbao.d1_file;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

public class FileTest4 {
    public static void main(String[] args) throws Exception {
        //public String [] list ()
        //获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。
        File f1 = new File("E:\\硬件课设");
        String[] files = f1.list();
        for (String file : files) {
            System.out.println(file);
        }

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

        File f = new File("E:\\硬件课设/aaa");//不存在
        File[] files1 = f.listFiles();//null
        System.out.println(Arrays.toString(files1));

        File f3 = new File("E:\\硬件课设\\bbb.txt");
        System.out.println(f3.createNewFile());//空文件
        File[] f4 = f3.listFiles();
        System.out.println(Arrays.toString(f4));//null

        File f5 = new File("E:\\硬件课设/ccc");
        System.out.println(f5.mkdir());
        System.out.println(Arrays.toString(f5.listFiles()));//[]
    }
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=9178:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\file-io-app com.xinbao.d1_file.FileTest4
bbb
bbb.txt
BIN
README.TXT
UPDATES
E:\硬件课设\bbb
E:\硬件课设\bbb.txt
E:\硬件课设\BIN
E:\硬件课设\README.TXT
E:\硬件课设\UPDATES
null
false
null
true
[]

进程已结束,退出代码为 0
方法递归 

什么是方法递归?
.递归是一种算法,在程序设计语言中广泛应用。
·从形式上说:方法调用自身的形式称为方法递归( recursion )。

递归的形式
直接递归:方法自己调用自己。
间接递归:方法调用其他方法,其他方法又回调方法自己。
使用方法递归时需要注意的问题:
.递归如果没有控制好终止,会出现递归死循环,导致栈内存溢出错误。

package com.xinbao.d2_recursion;

public class RecursionTest1 {
    public static void main(String[] args) {
        test1();
    }

    //直接方法递归
    public static void test1() {
        System.out.println("---test1---");
        test1();//死循环,栈内存溢出
    }
    
    //间接方法递归
    public static void test2(){
        System.out.println("---test2---");
        test3();
    }

    public static void test3() {
        test2();//间接递归
    }
}
算法思想

明确递归的公式,递归的终结点,算法必须走向终结点

案例1:计算n的阶乘

package com.xinbao.d2_recursion;

public class RecursionTest2 {
    public static void main(String[] args) {
        System.out.println(f(5));//120
    }

    public static int f(int n) {
        if (n == 1){
            return 1;
        }else{
            return f(n - 1) * n;
        }
    }
}

案例2:计算1 ~ n的和

package com.xinbao.d2_recursion;

public class RecursionTest3 {
    public static void main(String[] args) {
        System.out.println(f(10));//55
    }

    public static int f(int n) {
        if (n == 1){
            return 1;
        }else{
            return f(n - 1) + n;
        }
    }
}
案例


文件搜索
在 Data ( D :)中搜索
需求:从 D :盘中,搜索" QQ . exe "这个文件,找到后直接输出其位置。分析:
①先找出 D :盘下的所有一级文件对象
②遍历全部一级文件对象,判断是否是文件
)如果是文件,判断是否是自己想要的
如果是文件夹,需要继续进入到该文件夹,重复上述过程

package com.xinbao.d2_recursion;

import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;

public class RecursionTest4 {
    public static void main(String[] args) throws Exception {
        //"C:\Users\86182\Desktop\WPS Office.lnk"
            searchFile(new File("E:/"), "WPS Office");
    }

    /**
     * 去目录下搜索某个文件
     * @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){
            //4、遍历全部一级文件对象
            for (File file : files) {
                //5、判断这个文件对象是文件还是文件夹
                if (file.isFile())
                {
                    //是文件,判断文件名是否匹配
                    if (file.getName().contains(fileName)){
                        System.out.println("找到了:" + file.getAbsolutePath());
//                        Runtime runtime = Runtime.getRuntime();
//                        File f = new File("C:\\Users\\Public\\Desktop\\Microsoft Edge.lnk");
//                        runtime.exec(f.getAbsolutePath());
                    }
                }else{
                    //是文件夹,递归
                    searchFile(file,fileName);
                }
            }
        }
        //System.out.println("没找到");
    }
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=59383:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\file-io-app com.xinbao.d2_recursion.RecursionTest4
找到了:E:\国赛\预测结果\无风化预测\WPS Office.lnk

进程已结束,退出代码为 0

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

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

相关文章

JavaScript从入门到精通系列第二十七篇:详解JavaScript中的包装类

大神引荐:作者有幸结识技术大神孙哥为好友获益匪浅,现在把孙哥视频分享给大家 孙哥链接:孙哥个人主页 作者简介:一个颜值99分,只比孙哥差一点的程序员 本专栏简介:话不多说,让我们一起干翻JavaS…

uniapp 查看安卓第三方插件抛出的异常

0.安装好andriod studio 和hbuilder 1.配置环境变量 鼠标右键此电脑-》设置》关于》高级系统设置》环境变量》系统变量》path中加入 具体的hbuildr adb目录看个人 2.在cmd中输入命令adb version 查看是否配置成功 出现版本号就是配置成功了 3.去hbuilder中,导航栏运…

04.Oracle的体系架构

Oracle的体系架构 一、主要组件 一、主要组件 下面是一张网图,大家可以了解一下oracle的体系架构 Oracle数据库的体系架构可以分为以下几个主要组件:实例(Instance)、数据库(Database)、表空间&#xff…

Kafka保证百万级数据写入和重发问题

Kafka作为当下流行的高并发消息中间件,大量用于数据采集,实时处理等场景, 那么它如何做到百万级写入速度呢?我们在享受它带来的高并发,高可靠等便利时,同时不得不面对可能存在的问题,项目中最常见的就是丢…

【KMP算法,数组】

文章目录 KMP算法数组数组的抽象类型定义数组的顺序存储三维数组 KMP算法 KMP算法设计思想: 利用已经部分匹配的结果而加快模式串的滑行速度,且主串S的指针i不必回溯,可提速到O(nm); 定义next[j]函数,表明当模式中第j…

【ArcGIS微课1000例】0077:ArcGIS生成经纬网(shp格式)

使用ArcGIS制图的时候,可以很方便的生成经纬网、方里网及参考格网,但是在需要shp格式的经纬网,进一步在南方cass中使用经纬网的时候,就需要单独生成了。 如下图所示为全球大陆矢量数据,我们基于该数据来生成全球指定间距的经纬网数据。 在ArcGIS中,生成经纬网和方里网均…

Qwt 使用QwtDial绘制汽车仪表盘

1.概述 QwtDial是Qwt库中的一个类,用于绘制一个可旋转的仪表盘。 以下是类继承关系: 2.常用方法 void setOrigin(double origin) 设置仪表盘的原点角度,以度为单位,默认为0度,正值为逆时针旋转,负值为顺时…

两个字符串的删除操作

题目描述 给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。每步可以删除任意一个字符串中的一个字符。 示例 思路 其实这道题的思路和最长公共子序列的思路一致,本题让我们求word1 和 word2 相同所需的最小步数&#xff0…

【QT】事件过滤器

事件过滤器1、给控件安装过滤器 2、重写过滤器事件bool eventFilter(两个参数); 基于上一个项目:【QT】事件分发器-CSDN博客 我的代码有问题,不能实现事件过滤器的功能,先记录下来 在头文件中要声明该函数。 #include "widget.h"…

单链表练习

单链表练习 相关内容: 1.再理解:LNode、*LinkList 2.单链表的整表创建(头插法和尾插法) 3.单链表的读取、插入、删除 4.单链表的整表删除 //单链表的初始化、创建、插入、删除、查找 //结点的结构体:数据域、指针域 …

Android应用程序的核心组件Activity

Activity组件 Activity组件是Android应用程序的核心组件之一,它提供了一个用户界面,用于与用户进行交互。每个Activity都是一个独立的屏幕,它可以包含用户界面元素(如按钮、文本框等)和逻辑代码,用于响应用…

玩了一下 Jenkins,最新版本 + JDK11

背景 今年五月的时候玩了一下 Jenkins,最新版本 2.414.3 ,JDK 11 。本机有两个 JDK,只放到 Tomcat 里面了,看到了一个启动页面,后面有其他事情就忘记了。最近又想起来,觉得还是应该玩一下这么有技术含量的…

K8S的pod创建过程

创建流程图 用户发起请求创建deployment;apiserver收到创建资源的请求,apiserver对客户端操作进行身份认证,认证完成后接受该请求,并把相关的信息保存到etcd中,然后返回确认信息给客户端;apiserver向etcd…

【Python3】【力扣题】217. 存在重复元素

【力扣题】题目描述: 【Python3】代码: 1、解题思路:遍历每个元素,判断元素个数是否大于1。(此方法不适用。超出时间限制) class Solution:def containsDuplicate(self, nums: List[int]) -> bool:# 超…

优先队列----数据结构

概念 不知道你玩过英雄联盟吗?英雄联盟里面的防御塔会攻击离自己最近的小兵,但是如果有炮车兵在塔内,防御塔会优先攻击炮车(因为炮车的威胁性更大),只有没有兵线在塔内时,防御塔才会攻击英雄。…

关于嵌入式rtthread系统与单片机芯片

简介 我估计已经有很久没更新了,近一年都在某个国企里工作,我做的就是嵌入式工程师的岗位,最近才刚刚退出来,想来说说自己的工作使用的软件和系统。 本身进公司的时候,其实做的就是写单片机的板子的程序的工作&#x…

8. 一文快速学懂常用工具——Linux命令(上)

本章讲解知识点 引言 指令学习 本专栏适合于软件开发刚入职的学生或人士,有一定的编程基础,帮助大家快速掌握工作中必会的工具和指令。本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。如专栏内容有错漏,欢迎在评论区指…

西门子PLC ModbusTcp通信访问网关后从站(梯形图篇)

这篇文章和之前的" 西门子PLC ModbusTcp通信访问网关后从站(SCL语音轮询状态机FB) "属于姊妹篇,这里我们主要介绍梯形图代码如何实现ModbusTcp轮询。 SCL代码篇 西门子PLC ModbusTcp通信访问网关后从站(SCL语言轮询状态机FB)-CSDN博客文章浏览阅读6次。西门子PLC的…

创建超过1G内存大小的程序

正常情况一个进程最大占用内存为1G一下&#xff0c;如果程序有需求要使用超过1G大小的程序&#xff0c;可进行如下操作 VS修改设置&#xff1a;属性--->链接器--->系统--->启用大地址 【选择是】 测试申请堆内存代码 #include <stdlib.h> #include <stdio…

【数据结构】树形结构所有路径复原为链表

目录 1. 树形结构可视化 2. 树形结构转为链表 此目标是要还原树形结构的所有路径。树形结构是一种常见的数据结构&#xff0c;它表示元素之间层次关系。在树形结构中&#xff0c;每个节点可能拥有一个或多个子节点&#xff0c;形成了一个分层的结构。为了还原树形结构的路径&…