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

File类、方法递归

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、判断当前文件对象对应的路径是否存在,存在返回trueSystem.out.println(f1.exists());//falseSystem.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();//nullSystem.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));//nullFile 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

相关文章:

File类、方法递归

File:代表文本 IO流:读写数据 1、 File 类构建对象的方式是什么样的? File 的对象可以代表哪些东西? 注意 File 对象既可以代表文件、也可以代表文件夹。 ● File 封装的对象仅仅是一个路径名,这个路径可以是存在的&#xff0c…...

MySQL - 系统库之 sys

sys 系统库用于管理和监控MySQL服务器的性能和运行状态: 用途: 性能监控和分析:sys 系统库用于监控MySQL服务器的性能和资源利用情况。它提供了各种视图和函数,用于分析查询性能、资源利用、等待事件等方面的数据。性能调优&…...

GoLong的学习之路(十七)基础工具之Gin框架使用JWT(前后端分离)

文章目录 JWT安装JWT使用什么是Claims默认Claims自定义Claims生成JWT解析JWT 在gin框架中使用JWT获取Token渠道定义方法设置中间件注册路由 总结一下 JWT JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式&a…...

【代码数据】2023粤港澳大湾区金融数学建模B题分享

基于中国特色估值体系的股票模型分析和投资策略 首先非常建议大家仔细的阅读这个题的题目介绍,还有附赠的就是那个附件里的那几篇材料,我觉得你把这些内容读透理解了,就可以完成大部分内容。然后对于题目里它主要第一部分给出了常用的估值模…...

大数据之LibrA数据库系统告警处理(ALM-12006 节点故障)

告警解释 Controller按30秒周期检测NodeAgent状态。当Controller连续三次未接收到某个NodeAgent的状态报告时,产生该告警。 当Controller可以正常接收时,告警恢复。 告警属性 告警ID 告警级别 可自动清除 12006 严重 是 告警参数 参数名称 参…...

poi兴趣点推荐数据集介绍

介绍 foursquare数据集包含2153471个用户,1143092个场所,1021970个签到,27098490个社交关系以及用户分配给场所的2809581评级,我们常用的是根据NYC和TKY都是从该数据集中抽取出来的。 下载地址:https://sites.google.…...

把两个4点的结构相加

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点,训练集中只有5张图片,让A中有4个1,B全是0,排列组合,统计迭代次数并排序。 其中有3个结构 3差值结构 迭代次数 4差值结构 迭代次数 31 3-2 0 1 …...

windows内存取证-中等难度-下篇

上文我们对第一台Target机器进行内存取证,今天我们继续往下学习,内存镜像请从上篇获取,这里不再进行赘述​ Gideon 攻击者访问了“Gideon”,他们向AllSafeCyberSec域控制器窃取文件,他们使用的密码是什么? 攻击者执…...

代码随想录算法训练营第7天|454 四数相加II 383. 赎金信 15.三数之和 18 四数之和

JAVA代码编写 454. 四数相加 II 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#xff1a;…...

负载均衡深度解析:算法、策略与Nginx实践

引言 如今&#xff0c;网站和应用服务面临着巨大的访问流量&#xff0c;如何高效、稳定地处理这些流量成为了一个亟待解决的问题。负载均衡技术因此应运而生&#xff0c;它通过将流量合理分配到多个服务器上&#xff0c;不仅优化了资源的利用率&#xff0c;还大大提升了系统的…...

7. 一文快速学懂常用工具——Makefile

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

[ACTF2023]复现

MDH 源题&#xff1a; from hashlib import sha256 from secret import flagr 128 c 96 p 308955606868885551120230861462612873078105583047156930179459717798715109629 Fp GF(p)def gen():a1 random_matrix(Fp, r, c)a2 random_matrix(Fp, r, c)A a1 * a2.Treturn…...

HNU-编译原理-讨论课1

讨论课安排&#xff1a;2次4学时&#xff0c;分别完成四大主题讨论 分组&#xff1a;每个班分为8组&#xff0c;每组4~5人&#xff0c;自选组长1人 要求和说明&#xff1a; 以小组为单位上台报告&#xff1b;每次每组汇报2个小主题&#xff0c;每组按要求在2个小主题中各选1…...

【Linux】关于Nginx的详细使用,部署项目

前言&#xff1a; 今天小编给大家带来的是关于Nginx的详细使用&#xff0c;部署项目&#xff0c;希望可以给正在学习&#xff0c;工作的你带来有效的帮助&#xff01; 一&#xff0c;Nginx简介 Nginx是一个高性能的开源Web服务器和反向代理服务器。它最初由Igor Sysoev在2004年…...

编写 navigation2 控制器插件

简介 本教程展示了如何创建自己的控制器插件。在本教程中&#xff0c;我们将基于这篇论文实现纯追踪路径跟踪算法。建议您阅读该论文。   注意&#xff1a;本教程基于 Nav2 堆栈中以前存在的简化版本的 Regulated Pure Pursuit 控制器。您可以在此处找到与本教程相匹配的源代…...

计算机网络 第六章应用层

文章目录 1 应用层功能概述2 网络应用模型&#xff1a;客户服务器(CS)3 网络应用模型&#xff1a;PeerToPeer(P2P)4 域名和域名系统5 常见域名解析服务器6 两种域名解析过程7 什么是FTP8 FTP的工作原理9 EMail的组成 1 应用层功能概述 2 网络应用模型&#xff1a;客户服务器(CS…...

人工智能领域CCF推荐国际学术刊物最新目录(全)

2021年1月&#xff0c;CCF决定启动新一轮中国计算机学会推荐国际学术会议和期刊目录调整工作并委托CCF学术工作委员会组织实施。 2023年3月8日, 中国计算机学会正式发布了2022版《中国计算机学会推荐国际学术会议和期刊目录》(以下简称《目录》) 。 相较于上一版目录&#xff0…...

实现基于 Azure DevOps 的数据库 CI/CD 最佳实践

数据库变更一直是整个应用发布过程中效率最低、流程最复杂、风险最高的环节&#xff0c;也是 DevOps 流程中最难以攻克的阵地。那我们是否能在具体的 CI/CD 流程中&#xff0c;像处理代码那样处理数据库变更呢&#xff1f; DORA 调研报告 DORA&#xff08;DevOps Research &am…...

上海实习小记

8月3日入职10月27日离职&#xff0c;原本还想做满3个月再走&#xff0c;可惜公司提早要迁到成都&#xff0c;就只好 离职了回学校了。在博客随便写写记录一下这几个月的生活吧&#xff0c;想到哪里写到哪里 实习的公司是一个小公司&#xff0c;开发一款类似于咸鱼之王的游戏&am…...

uniapp实现路线规划

UniApp是一个基于Vue.js框架开发的跨平台应用开发框架&#xff0c;可以同时构建iOS、Android、H5等多个平台的应用。它使用了基于前端技术栈的Web开发方式&#xff0c;通过编写一套代码&#xff0c;即可在不同平台上运行和发布应用。 UniApp具有以下特点&#xff1a; 跨平台开…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...