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),最少需要多少次操作能…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
