File类与IO流相关面试知识(一)
一.java.io.File类
作用:它的作用是用来表示某个文件或文件夹(文件夹又称为目录)
如何用File类的对象表示一个文件或目录的呢?
API文档中描述:文件和目录路径名的抽象表示形式
解释:如果要表示一个文件或目录,需要指定它的“路径名”
例如:要表示Windows操作系统下的D盘Download文件夹下的大学资料.zip
那么可以这样表示 File file = new File("d:\\Download\\大学资料.zip");
要表示Windows操作系统下的D盘Download文件夹
那么可以这样表示 File file = new File("d:\\Download");
路径分隔符:
早期Windows只支持 \
现在所有平台都支持 /
二.File类的常用方法系列1
public String getName():返回由此File表示的文件或目录的名称
public long length():返回由此File表示的文件的长度。
返回由此抽象路径名表示的文件的长度。如果此路径名表示一个目录,则返回值是不确定的。
public String getPath():将此File转换为路径名字符串。
public long lastModified():返回File对象对应的文件或目录的最后修改时间(毫秒值)
三.各种路径问题
路径名词
(1)绝对路径和相对路径
绝对路径:在描述文件或文件夹时,从根目录开始导航的路径
对于windows操作系统来说,盘符就是根
如:d:/Download
d:/Download/大学资料.zip
对于linux操作系统来说,/ 就是根
/Download
相对路径:在描述文件或文件夹下,不是从根目录开始导航的路径
例如:download/1.txt
相当于谁呢?
对于IDEA中,JUnit的test方法,相对路径是相当于当前的模块
对于IDEA中,main方法,相对路径是相当于当前的project
(2)构造路径
在new File()对象时,在()中填写的路径。
构造路径可以是相对路径,也可以是绝对路径。
(3)规范路径
如果路径名中出现了".."等情况,会进行解析
String getPath():获取的是构造路径的值
String getAbsolutePath():获取绝对路径的值
String getCanonicalPath():获取规范路径的值
(4)File类的常用方法系列3
创建文件和文件夹的方法
public boolean createNewFile() throws IOException:创建一个新文件
public boolean mkdir():创建文件夹,这个是文件夹只能一个一个创建
public boolean mkdirs():创建文件夹,这个是文件夹的多个目录可以一起创建
public Boolean delete():删除文件或文件夹
如果文件夹是非空目录,那么是无法删除的。即只能删除空文件夹。
(5)判断某个File对象代表的文件或文件夹的情况:
public boolean exists():此File表示的文件或目录是否实际存在
public boolean isDirectory():此File表示的是否为目录
public boolean isFile():此File表示的是否为文件
如果指定的某个文件或文件夹的路径名后,这个文件或文件夹在实际的路径下不存在,不影响创建File类的对象。
如果File类对象的代表的文件或文件夹不存在,那么它既不是文件夹也不是文件。
(6)对于文件夹的File对象来说,可以进行如下操作:
public String[] list():返回一个String数组,表示该File目录中的所有的子文件或目录。
public File[] listFiles():返回一个File数组,表示该File目录中的所有的子文件或目录
public File[] listFiles(FileFilter filter):返回所有满足指定过滤器的文件和目录。如果给定 filter 为 null,则接受所有路径名。否则,当且仅当在路径名上调用过滤器的 FileFilter.accept(File pathname)方法返回 true 时,该路径名才满足过滤器。如果当前File对象不表示一个目录,或者发生 I/O 错误,则返回 null。
public String[] list(FilenameFilter filter):返回返回所有满足指定过滤器的文件和目录。如果给定 filter 为 null,则接受所有路径名。否则,当且仅当在路径名上调用过滤器的 FilenameFilter .accept(File dir, String name)方法返回 true 时,该路径名才满足过滤器。如果当前File对象不表示一个目录,或者发生 I/O 错误,则返回 null。
public File[] listFiles(FilenameFilter filter):返回返回所有满足指定过滤器的文件和目录。如果给定 filter 为 null,则接受所有路径名。否则,当且仅当在路径名上调用过滤器的 FilenameFilter .accept(File dir, String name)方法返回 true 时,该路径名才满足过滤器。如果当前File对象不表示一个目录,或者发生 I/O 错误,则返回 null。
java.io.FileFilter:文件过滤接口
抽象方法:boolean accept(File pathname)
pathname是某个文件夹在列出下一级时的每一个下一级
如果pathname根据某个条件返回true,就表示要留下这个文件或文件夹。
代码整合:
public class TestFile {@Testpublic void test17(){//获取download下面的所有图片 以.jpg为例File dir = new File("d:\\download");listAllJpgImageSubs(dir);}public void listAllJpgImageSubs(File dir){if(dir.isDirectory()){//条件成立的话,说明是一个存在的文件夹File[] files = dir.listFiles(new FileFilter() {@Overridepublic boolean accept(File pathname) {return pathname.getName().endsWith(".jpg") || pathname.isDirectory();}});for (File sub : files) {if(sub.isDirectory()){listAllJpgImageSubs(sub);}else{System.out.println(sub);}}}}@Testpublic void test16() {File dir = new File("d:\\download");listAllSubs(dir);}public void listAllSubs(File dir){if(dir.isDirectory()){//条件成立的话,说明是一个存在的文件夹System.out.println(dir);File[] files = dir.listFiles();for (File sub : files) {if(sub.isDirectory()){listAllSubs(sub);}else{System.out.println(sub);}}}}/*public void listAllSubs(File dir){System.out.println(dir);if(dir.isDirectory()){//条件成立的话,说明是一个存在的文件夹File[] files = dir.listFiles();for (File sub : files) {listAllSubs(sub);}}}*/@Testpublic void test15(){File dir = new File("d:\\download");String[] allSubs = dir.list();for (String sub : allSubs) {System.out.println(sub);}}@Testpublic void test14() throws IOException {File file = new File("d:/Download/北华大学实训归档材料-王海龙.zip");System.out.println(file.exists());//trueSystem.out.println(file.isDirectory());//falseSystem.out.println(file.isFile());//true}@Testpublic void test13(){File file = new File("d:\\1.txt");//new File对象只是在JVM的堆内存中创建一个对象,不会真的在硬盘中创建一个文件或文件夹。//只有调用createNewFile或mkdir/mkdirs才会创建文件或文件夹System.out.println(file.exists());//falseSystem.out.println(file.isDirectory());//falseSystem.out.println(file.isFile());//falseSystem.out.println(file.length());//0System.out.println(file.lastModified());//0}@Testpublic void test12(){File file = new File("download\\1.txt");file.delete();File dir = new File("download");dir.delete();}@Testpublic void test11() throws IOException {File dir = new File("d:\\io\\java\\test\\aa");//dir是代表aa文件夹//dir.mkdir();//如果d:\io\java\test文件夹不存在,aa文件夹创建失败,但是不会报异常dir.mkdirs();//如果d:\io\java\test文件夹不存在,连同它们和aa一起创建}@Testpublic void test10() throws IOException {File file = new File("d:/Download/北华大学实训归档材料-王海龙.zip");System.out.println(file.getPath());//d:\Download\北华大学实训归档材料-王海龙.zipSystem.out.println(file.getAbsolutePath());//d:\Download\北华大学实训归档材料-王海龙.zipSystem.out.println(file.getCanonicalPath());//D:\Download\北华大学实训归档材料-王海龙.zip}@Testpublic void test09() throws IOException {File file = new File("../../../download/1.txt");System.out.println(file.getPath());//..\..\..\download\1.txtSystem.out.println(file.getAbsolutePath());//D:\atguigu\javaee\JavaSE20220106\JavaSECode\day0218_22teacher_code\..\..\..\download\1.txtSystem.out.println(file.getCanonicalPath());//D:\atguigu\javaee\download\1.txt}@Testpublic void test08() throws IOException {File file = new File("d:/Download/北华大学实训归档材料-王海龙.zip");System.out.println(file.getPath());//d:\Download\北华大学实训归档材料-王海龙.zipSystem.out.println(file.getAbsolutePath());//d:\Download\北华大学实训归档材料-王海龙.zip}@Testpublic void test07() throws IOException {File file = new File("download/1.txt");System.out.println(file.getPath());//download\1.txtSystem.out.println(file.getAbsolutePath());//D:\atguigu\javaee\JavaSE20220106\JavaSECode\day0218_22teacher_code\download\1.txt}public static void main(String[] args) throws IOException{File dir = new File("download");dir.mkdir();//make directoryFile file = new File("download/1.txt");file.createNewFile();}@Testpublic void test06() throws IOException {File dir = new File("download");dir.mkdir();//make directoryFile file = new File("download/1.txt");file.createNewFile();}@Testpublic void test05() {File file = new File("d:/Download");System.out.println(file);System.out.println("文件夹名字:" + file.getName());System.out.println("文件夹路径名:" + file.getPath());System.out.println("文件夹大小:" + file.length());//错误的System.out.println("最后修改时间:" +file.lastModified());long time = file.lastModified();Date date = new Date(time);System.out.println("最后修改时间:" + date);}@Testpublic void test04() {File file = new File("d:/Download/北华大学实训归档材料-王海龙.zip");System.out.println(file);System.out.println("文件名字:" + file.getName());System.out.println("文件路径名:" + file.getPath());System.out.println("文件大小:" + file.length());System.out.println("最后修改时间:" +file.lastModified());long time = file.lastModified();Date date = new Date(time);System.out.println("最后修改时间:" + date);}@Testpublic void test03() {File file = new File("d:/Download/北华大学实训归档材料-王海龙.zip");System.out.println(file);}@Testpublic void test02() {File file = new File("d:\\Download","北华大学实训归档材料-王海龙.zip");System.out.println(file);}@Testpublic void test01(){File file = new File("d:\\Download\\北华大学实训归档材料-王海龙.zip");File dir = new File("d:\\Download");System.out.println(file);System.out.println(dir);}
}
练习题(1):求某个目录(某个文件夹)总大小
public class Exercise1 {public static void main(String[] args) {File dir = new File("d:\\学习资料");
// System.out.println(dir.length());//无法直接通过length方法获取文件夹的总大小System.out.println(getDirectoryLength(dir));}public static long getDirectoryLength(File dir){/*用一个变量,累加这个文件夹里面(包含下一级的下一级)的文件的大小。*/long sum = 0;if(dir.isFile()){//如果dir是文件,那么直接用length方法表示大小sum = dir.length();}else if(dir.isDirectory()){//列出文件夹的下一级File[] files = dir.listFiles();for (File sub : files) {//sub是dir的下一级,它可能是一个文件,也可能是一个文件夹
// sum += sub的大小;sum += getDirectoryLength(sub);}}return sum;}}
练习题(2):递归删除非空目录
public class Exercise2 {public static void main(String[] args) {//友情提示:找一个没有用的文件夹测试,不然删除后,不在回收站File dir = new File("d:\\学习资料");
// dir.delete();forceDeleteDirectory(dir);}public static void forceDeleteDirectory(File dir){/*思路:先把dir的下一级干掉,再删除dir自己*///先把dir的下一级干掉if(dir.isDirectory()){File[] files = dir.listFiles();for (File sub : files) {//sub是dir的下一级,可能是文件,可能是文件夹,而且文件夹可能是非空的forceDeleteDirectory(sub);}}//删除dir自己dir.delete();}
}相关文章:
File类与IO流相关面试知识(一)
一.java.io.File类 作用:它的作用是用来表示某个文件或文件夹(文件夹又称为目录) 如何用File类的对象表示一个文件或目录的呢? API文档中描述:文件和目录路径名的抽象表示形式 解释:如果要表示一个文件…...
009 - STM32学习笔记 - 中断
009 - STM32学习笔记 - 中断 这节的内容,野火的官方视频我反复看了好几次,但是感觉火哥在这块讲解的特别绕,理解起来很吃力,后来在看了一下其他老师的视频,结合一些书本资料和官方手册,才搞清楚STM32中断该…...
分享几种js格式化金额的方法
一、使用 Intl.NumberFormat 构造函数 这是 JavaScript 中格式化金额的最常见方法。Intl.NumberFormat()构造函数接受两个参数:语言环境和选项。语言环境是为其格式化金额的语言和地区。选项是一组控制金额格式的属性。例如,可以使用样式属性来指定货币…...
圣墟传说H5手工端搭建架设教程
圣墟传说H5手工端搭建架设教程 大家好,我是艾西。今天给大家带来的游戏是由小说改编而来的大型玄幻MMORPG仙侠手游,也是比较老的游戏了虽然你可能没有怎么听过,但总会有一批喜欢的玩家热衷于它。 那么让我们直接进入正题开始操作࿱…...
编程(40)----------单例模式
在简单总结单例模式之前, 需要了解一下背景知识-----为何会有单例模式? 想象一个这样的场景, 打游戏的时候, 尝试很多次, 都未通关. 这种情况下是否会考虑查一下攻略? 一个好的攻略甚至可能连每一关的每一个场景由多少只怪物都说的清清楚楚. 再比如, 在以前上学的时候, 为了…...
Java开发 - 让你少走弯路的Redis主从实现单节点哨兵模式
前言 前一篇中,我们讲解了Redis主从的搭建方式,其实很简单呐有木有,都是配置,连句代码都没有,是不是感觉高估了Redis主从的搭建方式?哈哈,没关系,跟着博主,包你全会。今…...
Java的Atomic原子类
Java SDK 并发包里提供了丰富的原子类,我们可以将其分为五个类别,这五个类别提供的方法基本上是相似的,并且每个类别都有若干原子类。 对基本数据类型的变量值进行原子更新;对对象变量的指向进行原子更新;对数组里面的…...
离线语音控制新方案,NRK3303语音识别芯片在智能风扇的应用
随着科技的不断发展,智能家居已经成为人们日常生活中不可或缺的一部分,涌现出越来越多的智能设备,如智能门锁、智能灯泡、智能冰箱等,这些设备为人们的生活带来了更多的便利和创新。其中作为常见的风扇通过添加智能语音控制功能&a…...
在树莓派3B+上安装Pytorch1.7
在树莓派3B上安装Pytorch1.7(应该是最简单的方法了)_package libopenblas-dev has no installation cand_Chauncey_Wang的博客-CSDN博客由于项目要求,我需要在树莓派上安装pytorch这就有几个问题,首先吧,咱们和外面之间有一道长城,…...
Java性能权威指南-总结4
Java性能权威指南-总结4 Java性能调优工具箱操作系统的工具和分析CPU运行队列磁盘使用率网络使用率 Java监控工具基本的VM信息 Java性能调优工具箱 操作系统的工具和分析 CPU运行队列 快速小结 检查应用性能时,首先应该审查CPU时间。优化代码的目的是提升而不是…...
c语言全局变量和局部变量问题汇总
✅作者简介:嵌入式领域优质创作者,博客专家 ✨个人主页:咸鱼弟 🔥系列专栏:单片机设计专栏 📃推荐一款求职面试、刷题神器👉注册免费刷题 1、关键字static的作用是什么? 定义静态变…...
14.3:给定一个由字符串组成的数组strs,必须把所有的字符串拼接起来,返回所有可能的拼接结果中字典序最小的结果
给定一个由字符串组成的数组strs,必须把所有的字符串拼接起来,返回所有可能的拼接结果中字典序最小的结果 贪心写法 首先注意的一点是:如果两个字符串的长度相同,“abc”,“abd”,肯定是“abc”的字典序最…...
C++ 项目实战:跨平台的文件与视频压缩解压工具的设计与实现
C实战:跨平台文件与视频压缩解压工具的设计与实现 一、引言(Introduction)1.1 项目背景与目标1.2 技术选型:C、FFmpeg、libarchive、libzip、QtCFFmpeglibarchivelibzipQt 二、设计思路与框架(Design Philosophy and F…...
C和指针(二)数据
数据类型 1,C语言中仅有四种基本数据类型——整型、浮点型、指针、聚合类型(数组、结构等)。 2,整型包括字符、短整型、整型、长整型,且可以分为有符号和无符号两种版本。 1)长整型至少和整型一样长&#…...
PyTorch基础学习(一)
一.简介 PyTorch是一个基于Python的开源机器学习框架,它提供了丰富的工具和接口,用于构建和训练深度学习模型。PyTorch的主要特点包括: 动态计算图: PyTorch使用动态计算图,这意味着在模型构建过程中可以实时地进行计…...
chatgpt赋能python:Python代做:让您的网站更友好的SEO利器
Python代做:让您的网站更友好的SEO利器 如果您是一位网站管理员或者SEO工程师,您一定知道SEO对于网站的重要性。那么在SEO中,Python代做可以为您提供什么?在本文中,我们将通过介绍Python代做的技术和方法,…...
2022年都快结束了,还有人不会安卓录屏?在安卓上录制屏幕的的实现方式
前言 在我之前的文章 《以不同的形式在安卓中创建GIF动图》 中,我挖了一个坑,可以通过录制屏幕后转为 GIF 的方式来创建 GIF。只是当时我只是提了这么一个思路,并没有给出录屏的方式,所以本文的内容就是教大家如何通过调用系统 A…...
px rem em rpx 区别 用法
任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合: 1em16px。那么12px0.75em,10px0.625em。为了简化font-size的换算,需要在css中的body选择器中声明Font-size62.5%,这就使em值变为 16px*62.5%10px, 这样12px1.2em, 10px1em, 也就是说只需要…...
忆享聚焦|ChatGPT、AI、网络数字、游戏……近期热点资讯一览
“忆享聚焦”栏目第十四期来啦!本栏目汇集近期互联网最新资讯,聚焦前沿科技,关注行业发展动态,筛选高质量讯息,拓宽用户视野,让您以最低的时间成本获取最有价值的行业资讯。 目录 行业资讯 1.科技部部长王志…...
[Daimayuan] 树(C++,动态规划,01背包方案数)
有一棵 n n n 个节点的以 1 1 1 号点为根的有根树。现在可以对这棵树进行若干次操作,每一次操作可以选择树上的一个点然后删掉连接这个点和它的儿子的所有边。 现在我们想知道对于每一个 k k k ( 1 ≤ k ≤ n 1≤k≤n 1≤k≤n),最少需要多少次操作能…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
