File类、字节流

Apache Paimon快照管理实战:如何避免Flink作业中的反压问题? 本文深入探讨了如何通过优化Apache Paimon的快照管理机制来避免Flink作业中的反压问题。详细解析了同步与异步快照过期模式的适用场景及配置建议,并提供了Checkpoint策略与状态后端的协同优化方案,帮助提升实时数据处理的性能和稳定性。 阅读详情

File类

File类表示文件或者

创建File对象

创建File对象时,需要指定一个路径。这个路径可以存在,也可以不存在,可以是文件路径也可是文件夹路径。

文件夹的路径。

File f1=new File("C:\\a.txt");
System.out.println(f1);

//根据父路径和子路径创建File对象
File f2=new File("C:\\aaa","a.txt");
System.out.println(f2);

//创建一个父路径的对象
File dir=new File("C:\\aaa");
//再根据父路径和子路径创建File对象
File f3=new File(dir,"a.txt");
System.out.println(f3); 

相对路径和绝对路径

绝对路径:从盘符开始的路径
	 "C:\\a.txt"
    
相对路径: 相对于项目的根目录,下面的路径
	 //假设项目的根路径是 C:\\IdeaProjects\javase
     绝对路径 "C:\\IdeaProjects\javase\myModule\a.txt"
     相对路径:"myModule\a.txt"
     
注意:只有在项目的文件下的文件,才可以写相对路径。

File类的常用方法

创建和删除方法

public boolean mkdir()
    创建文件夹,只能创建单极文件夹。
public boolean mkdirs()  
    创建多级文件夹(推荐)
public boolean createNewFile()
    创建文件,文件的父路径一定要存在。 
public void delete()
    删除文件或者文件夹(必须是空的文件夹才能删除)

判断功能

public boolean exists()  
    判断File对象的路径是否存在
public boolean isDirectory()  
    判断File对象的路径是否为文件夹路径
public boolean isFile() 
    判断File对象的路径是否为文件路径

获取功能

public String getName()  
    获取文件或者文件夹的名称(如:a.txt)
public String getParent()
    获取文件或者文件夹的父目录,返回字符串
public File getParentFile()  
    获取文件或者文件夹的父目录,返回File对象
public String getPath()  
    获取File对象封装的路径
public String getAbsolutePath()  
    获取绝对路径, 返回值是String类型
public File getAbsoluteFile()  
    获取绝对路径,返回值File对象
    
public long length()
    获取文件的大小,单位(字节)
    不能获取文件夹的长度

遍历文件夹的方法

public File[]  listFiles()
    获取当前目录下所有文件和文件夹,把获取到文件和文件夹以File对象的方式存在File数组中。
    注意:
    	1.返回值是null的几种情况
            File对象的目录路径不存在
            File对象的路径为文件路径
            File对象的文件没有权限访问
            
        2.File对象的目录存在,但是目录中没有东西(空的文件夹)
        	返回值是一个File[],但是数组中没有元素

File操作文件夹练习

遍历文件夹中所有的子文件和子目录

public class Demo2 {
    public static void main(String[] args) {
        File f=new File("C:\\Users\\Desktop\\a");
        printDirectory(f); 
    }
    //方法:遍历一个文件夹中的所有子文件和子文件夹
    public static void printDirectory(File dir){
        System.out.println(dir); //打印文件夹
        //判断dir是文件夹吗?
        if(dir.isDirectory()){
            //获取文件夹下的子文件和子文件夹,存在File数组中
            File[] files = dir.listFiles();
            if(files!=null){
                for (File file : files) {
                    //判断file是文件吗?是文件,直接打印
                    if(file.isFile()){
                        System.out.println(file);
                    }else {
                        //判断file是文件夹吗? 如果是文件夹,继续遍历文件夹
                        printDirectory(file); 
                    }
                }
            }
        }
    }
}

删除一个文件夹

删除文件夹的思路
    1.使用listFiles()获取文件夹的子目录和子文件
    2.删除子目录和子文件
        子目录(不能直接删除、递归删除)
           子文件(可以直接删除)
    3.最后在删除空的文件夹

public class Demo3 {
    public static void main(String[] args) {
        File file=new File("C:\\Users");
        deleteDir(file);
    }
    //方法: 删除文件夹
    public static void deleteDir(File dir){
        if(dir.isDirectory()){
            //遍历文件夹中的内容
            File[] files = dir.listFiles();
            if(files!=null){
                for (File file : files) {
                    if(file.isFile()){
                        //是文件,直接删除
                        file.delete();
                    }else{
                        //是文件夹,递归调用
                        deleteDir(file);
                    }
                }
            }
            //删除空的文件夹
            dir.delete(); 
        }
    }
}

统计一个文件夹中每一种文件出现的次数

//统计一个文件夹中每一种文件出现的次数
//参数1 HashMap: 键:文件后缀名,值:每一种文件对应的次数
//参数2 File:  需要统计的文件夹
public static void getCount(HashMap<String,Integer> map,File dir){
    //如果是文件夹,才进行下面的操作
    if(dir.isDirectory()){
        File[] files=dir.listFiles();
        if(files!=null){
            for(File file:files){
                //如果file是文件,统计每一种文件出现多少次,文件-次数对应关系,存储到map集合中
                if(file.isFile()){
                    //获取文件的后缀名 如: a.txt --> txt
                    String fileEndname=file.getName().split("\\.")[1];
                    //判断map集合中是否存在键
                    if(map.containsKey(fileEndname)){
                        //包含这个键,先获取键对应的值,再加1,再存回去
                        Integer count=map.get(fileEndname);
                        map.put(fileEndname,count+1);
                    }else{
                        //不包含键,第一次存
                        map.put(fileEndname,1); 
                    }
                }else{
                    getCount(map,file); 
                } 
            }
        }
    }
}

求文件夹的大小

public class Demo7 {
    public static void main(String[] args) {
        long length = getLength(new File("C:\\Users"));
        System.out.println(length);
    }

    //获取文件夹的大小
    //参数:File dir 文件夹
    //返回值: long 文件夹的大小
    public static long getLength(File dir) {
        long length = 0;
        //1.判断dir是否为文件夹
        if (dir.isDirectory()) {
            //2.是文件夹就进行遍历
            File[] files = dir.listFiles();
            if (files != null) {
                for (File file : files) {
                    //file可能是文件,也可能是文件夹
                    if (file.isFile()) {
                        //求文件的大小,和length累加
                        length += file.length();
                    } else if (file.isDirectory()) {
                        //求文件夹的大小,和length累加
                        length += getLength(file);
                    }
                }
            }
        }
        return length;
    }
}

IO流

内存:临时存储数据,程序运行时的一些数据都是在内存中的。
    程序运行结束之后,内存中的数据就被释放掉了。
    
硬盘:永久存储数据,程序结束之后数据还在。

IO流的分类

按照流向分类
    输入流: 读数据
    输出流: 写数据

按照读写的数据类型分类
    字节流:读写任意类型的文件(图片、视频、文字、游戏...)
        字节输入流:InputStream,用来读取字节数据
                   - FileInputStream:读取文件中的字节
                   - BufferedInputStream: 对已有的InputStream进行包装,提高读取的效率
            
        字节输出流:OutputStream,用来写字节数据
                   - FileOutputStream: 写入文件中的字节
                   - BufferedOutputStream:对已有的OutputStream进行包装,提高写入的效率

学习IO流的步骤

1.创建流对象(搭桥)
2.读写数据(过桥)
3.释放资源(过河拆桥)

字节流写数据

//创建输出流对象(搭桥),需要关联一个文件
//如果文件不存在,会自动创建一个
//如果文件存在,会把原来的文件覆盖掉
FileOutputStream fos=new FileOutputStream("myModule11\\a.txt");

//写数据(过桥)
fos.write("helloworld".getBytes());
fos.write("\r\n".getBytes()); //写一个换行
fos.write("你好世界".getBytes()); 

//写单个字节
fos.write(97); //97对应字符'a'

//写多个字节
byte[] bs={97,98,99,100,101}; //'a','b','c','d','e'
fos.write(bs);

//字节数组的一部分
fos.write(bs,0,3);

//释放资源(过河拆桥)
fos.close(); 

字节流读数据

 //1.创建输入流对象
FileInputStream fis=new FileInputStream("myModule11\\a.txt");

//2.读取数据:  一次读多个字节
byte[] bs = new byte[1024];
int len; //记录每次读取的字节个数
while ((len=fis.read(bs))!=-1){
    //把读取到的有效字节个数,转换为字符串
    String str=new String(bs,0,len);
    System.out.println(str);
}

//3.释放资源
fis.close();

字节流复制文件

把a.txt文件中的内容,复制到b.txt文件中

文件复制的思路:
    使用输入流,读取源文件(a.txt)
    使用输出流,写入目标文件(b.txt)

//使用输入流,读取源文件(a.txt)
FileInputStream fis=new FileInputStream("myModule11\\2.jpg");
//使用输出流,写入目标文件(b.txt)
FileOutputStream fos=new FileOutputStream("myModule11\\3.jpg");

//一遍读,一遍写
byte[] bs=new byte[1024];
int len; //每次读取的有效个数
while ((len=fis.read(bs))!=-1){
    //把读取到有效字节,写入目标文件中
    fos.write(bs,0,len);
}

//释放资源
fos.close(); 
fis.close(); 

字节缓冲流复制文件

BufferedInputStream和BufferedOutputStream用来对已有的InputStream和OutPutStream进行包装,从而提高读写效率。

//记录开始时间
long start = System.currentTimeMillis();

//读取a.exe文件
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\a.exe"));

//写入b.exe文件
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:\\c.exe"));

byte[] bs=new byte[1024];
int len; //读取的有效字节个数
while ((len=bis.read(bs))!=-1){
    bos.write(bs,0,len);
}

//释放资源
bos.close();
bis.close(); 

//记录结束时间
long end = System.currentTimeMillis();
System.out.println(end-start);

IO流异常处理

FileOutputStream fos = null;
try {
    //1. 创建FileOutputStream流对象(搭桥)
    fos = new FileOutputStream("day11\\a.txt");
    //2. 写数据(过桥)
    fos.write("hello".getBytes());

} catch (IOException e) {
    e.printStackTrace();
} finally {
    //不管异常是否发生,finally里面的代码一定会执行(释放资源的代码)
    //3. 关流
    if (fos != null) {
        try {
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
} 

YOLOv5改进 | 注意力篇 | iRMB倒置残差块注意力机制(轻量化注意力机制,附二次创新) 本文给家大家带来的改进机制是iRMB,其是在论文Rethinking Mobile Block for Efficient Attention-based Models种提出,论文提出了一个新的主干网络EMO(后面我也会教大家如何使用该主干,本文先教大家使用该文中提出的注意力机制)。其主要思想是将轻量级的CNN架构与基于注意力的模型结构相结合(有点类似ACmix)我将iRMB和C2f结合,然后也将其用在了检测头种进行尝试三种结果进行对比,针对的作用也不相同,但是无论那种实验均有一定涨点效果。 阅读详情

相关推荐

爬虫风控实战:当你的代理IP被数美滑块盯上时,如何优雅破解?

本文深入探讨了爬虫风控对抗中数美滑块验证码的破解与防御策略。通过分析数美滑块的多层防御机制,提出了代理IP池精细化管理、请求特征拟人化改造以及工程化滑块验证解决方案等系统性方法,帮助开发者有效降低验证码触发率,提升爬虫效率。

weixin_27419879的博客 206

File.listFiles() 结果返回为null

原因就是没有添加这两个权限,但是普通的话应该报错,不清楚为什么没有任何错误信息,直接返回null

geyingqiの博客 9429

CSP-J/S复赛文件组织与freopen读写全攻略,避免爆零

在信息学竞赛的上机考试中,代码能力固然重要,但文件组织与输入输出重定向往往是决定成败的关键细节。许多选手习惯在线评测环境,对本地文件命名、目录层级和读写方式缺乏系统认知,导致算法正确却因文件名拼写错误或freopen使用不当而遗憾失分。理解评测系统的工作原理,掌握从建立准考证号目录到规范命名源文件,再到使用freopen进行文件流重定向的标准流程,是每位参赛者的必备技能。这种工程化习惯不仅适用于CSP-J/S复赛,也是未来参加NOI等更高水平竞赛的基础。本文从文件组织的底层逻辑出发,结合实战案例,系统讲解考

weixin_32466193的博客 592

storage/emulated/0路径下的File.listFiles返回值为null——android

storage/emulated/0路径下的File.listFiles返回值为null

qq_42282862的博客 1851

保姆级教程:QGC地面站Vehicle Setup全模块配置详解(从固件升级到安全设置)

本文提供QGC地面站Vehicle Setup全模块配置的保姆级教程,涵盖从固件升级到安全设置的完整流程。详细解析二次开发环境准备、传感器校准、飞行模式配置等关键步骤,帮助用户快速掌握无人机配置技巧,确保飞行安全与性能优化。

weixin_28726671的博客 384

CesiumForUnreal实现地形等高线效果

CesiumForUnreal实现地形等高线效果

专注GIS开发 3437

listFiles()为null原因

今天笔者在对File文件进行listFiles方法调用时,发现报错返回空指针异常,下面是列举的可能出现的错误的原因。

haobabiu的博客 1618

真正的工业级环形缓冲区(Circular Buffer)完整实现细节

永远不要永远不要ToArray()或AddRange()永远返回或两段Span永远用_head_tail% Capacity实现环形照着上面这套代码改,你的系统将彻底告别内存爆炸,从“实验室玩具”变成“产线战神”!需要我给你一个支持两段绘制的完整实现吗?

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 127

Android Studio中File对象的FileList()方法返回NULL的问题

今天想写一个能获取文件列表的demo,期间遇到了一个问题:File对象的FileList()方法返回NULL。 我的代码private void initFiles() { rootPath = Environment.getExternalStorageDirectory().getPath(); Log.d(TAG, "initFiles: "+rootPath);

Mervyn的博客 4502

STM32实战开发(128):智能位移检测 - 使用STM32实现位移检测

STM32作为一款功能强大的微控制器,由于其出色的处理能力、丰富的外设接口和低功耗特点,成为实现智能位移检测系统的理想选择。未来,可以通过结合更多传感器、多种数据处理算法以及云平台技术,进一步提升系统的智能化水平,优化位移测量的精度和稳定性。本篇博客将介绍如何使用STM32微控制器实现智能位移检测系统,涉及硬件设计、传感器选择、软件开发等多个方面,提供详细的设计步骤,并给出完整的代码示例,帮助开发者快速搭建智能位移检测系统。蜂鸣器连接到STM32的GPIO端口,当位移超过设定的阈值时,蜂鸣器发出警报。

2201_76125393的博客 900

YOLOv8融合可变形注意力(DAT)实战教程:暴力涨点的科研级注意力机制优化方案

DAT的“可变形注意力”为目标检测的“精准特征捕捉”提供了全新思路,而YOLOv8的工程化优势让这种科研创新能快速落地到工业场景。希望这篇教程能帮你在“注意力机制优化+复杂场景检测”的痛点上找到突破口。如果你在实操中遇到“涨点不明显”的问题,不妨回到“DAT的采样点是否贴合目标形状”“注意力权重是否有效过滤背景”这些细节上找原因——科研的价值,就在于在细节打磨中推动技术进步。祝你在DAT与YOLOv8的结合探索中,既能做出有说服力的实验成果,又能沉淀出解决异形目标检测难题的实用经验。

know_F0727的博客 83

File.listFiles()返回null

问题描述: File.listFiles()返回null 这几天Android Studio 用的是3.6.3,新项目使用一个原有的获取Android文件列表的工具类,说啥也不显示,同样的工具类,其他老的APP都好用,一脸懵逼。 排查后发现 新项目的 targetSdkVersion 是29 也就是 Android 10.0 最简便的办法是直接改targetSdkVersion 改成28,问题完美解决。 当然如果忘记动态申请权限也会导致返回null 解决方法 如果是androi...

dodod2012的专栏 6717

睿抗机器人魔力元宝在完成任务过程中如何使机械臂先到达白色盒子上方而不是先到达工作台?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1376

Java IO流之File类和字节流

Java IO流是Java比较重要的一个知识点,它使Java应用程序具备了对系统文件及文件内容的增删改查操作的功能,从而使Java应用程序数据可以实现持久化存储。本篇博客将介绍Java IO流体系中的File类和字节流。

weixin_45676761的博客 980

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

File类、递归、字节流

一、File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。 1.2 构造方法 public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。 public File(String parent, String child) :从父路径名字符串和子路径名字符串创建...

L-李俊漩的博客 225

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

File类&字节流&字符流

1.File类 1.1File类概述和构造方法 File:它是文件和目录路径敌人抽象表示 文件和目录是可以通过File封装成对象的 对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个个路径而已。它可以是存在的,也可以是不存在的。将来是要通过具体的操作把这个路径的内容转换为具体存在的。 方法名 说明 File(String pathname) 通过给定的路径名字符串转换为抽象路径名来创建新的File实例 File(String parent,String child) 从父

qq_43448363的博客 1223

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IO流之 File 类和字节流

Java IO流之 File 类和字节流详解,持续更新。

m0_52861684的博客 1381

Java中文件读写——File类,IO流,字符流,字节流

File类是什么? 1.在读写数据时告诉JVM要操作的文件或文件夹在哪。 2.对文件或文件夹本身进行操作。包括创建,修改,删除等操作。 IO流是什么? 1.可以将数据从本地文件中读取出来。 2.可以将数据从内存中保存到本地文件。 File类的构造方法 1.File时文件和目录路径名的抽象表示。 2.文件和目录可以被File封装成对象。 3.File封装的对象仅仅是一个路径名,它可以存在也可以不存在。 4.构造方法: File(String pathname) // 通过给定路径名字符串转换为抽象路径名来创

Stars____的博客 5197

File类,字节流

File类 File类表示文件或者文件夹的路径。 创建File对象 创建File对象时,需要指定一个路径。这个路径可以存在,也可以不存在,可以是文件路径也可是文件夹路径。 File f1=new File("C:\\a.txt"); System.out.println(f1); ​ File f2=new File("C:\\itheima\\aaa","a.txt"); System.out.println(f2); ​ File dir=new File("C:\\itheima\\aaa"

YezhanCHN的博客 566

异常、File类、IO字节流

异常、File类、IO字节流第1章 异常异常的概述案例代码JVM针对异常的默认处理方式案例代码异常处理方案try_catch编译时异常和运行时异常的区别案例代码异常处理方案throwsthrows使用的格式&注意事项案例代码File类File类的概述File类的构造方法案例代码File类的创建功能案例代码File类的删除功能案例代码File类的判断和获取功能案例代码IO(字节流)IO流的概...

Tracy19970428的博客 468

Java文件操作-file类、字节流

文章目录一、file类1.1引入file类1.2构造一个文件对象1.3构造方法1.4File类创建和删除功能二、字节流1.输入流1.1引人相关的类:1.2构造一个文件输人流对象:1.3利用文件输人流类的方法读取文本文件数数据:1.4关闭文件输人流对象:2.输出流2.1引入相关的类:2.2构造一个文件输出流对象:2.3利用文件输出流类的方法把数据写人文本文件中:2.4关闭文件输出流对象: 一、file类 在 Java 中,File 类是 java.io 包中唯一代表磁盘文件本身的对象。File 类定义了一些与

m0_53953493的博客 872

File类递归字节流

HashMap的特点是什么? 是一个双列集合,里面的数据都是一个键+一个值,键唯一(不重复),键可以为NULL,只能有一个,值可以为NULL,可以有多个. 无序(底层是由哈希表来控制键唯一的.) 如何将一个键和一个值存储到HashMap中? put(K key,V value) -> 先校验,如果集合中已经有了这个key,会覆盖掉之前的数据. LinkedHashMap的特点是...

ZY990120的博客 179

File类和字节流

一、File类: 1).java.io.File(类):它封装了一个文件/目录的"路径",它里面包含了一些方法,可以对这个路径的文件/目录做一些操作: 例如:创建文件/目录、删除文件/目录、获取文件/目录的一些属性信息。 但是:它不能读写文件内容!!!!! 读写文件内容用:IO流 2).File类的构造方法: 1).File(St...

qq_38135680的博客 441

File类、递归、IO概述、字节流

一. File类【了解】 a. 介绍 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作 b. 构造方法 i. public File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。 ii. public File(String parent, String child) :从父...

S_olomon的博客 302

【JAVA进阶】File类、字节流

资源都是实现了Closeable/AutoCloseable接口的类对象。

Javascript_tsj的博客 3483

File类、递归、IO流、字节流、字符流

File类、递归、IO流、字节流、字符流 一.File类 1.File类的作用 代表磁盘上某个文件或者某个文件夹 2.File类的构造 "public File(String path); -- 以指定的路径创建一个File对象 public File(String parent,String child); -- 以父路径和子路径创建一个File对象 public File(File parent,String child); -- 以父File对象和子路径创建一个File对象

copyright0501的博客 165
上一篇: 可变参数和Strem流
下一篇: IO流《字节流、字符流、转换流》
Figure_TheKeyboard
博客等级 码龄5年 6粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值