File(一),IO流,递归详解

File类

介绍

java.io.File类是Java语言提供了用来描述文件和目录(文件夹)的

构造

方法

Snipaste_2024-04-05_09-21-24.png
注意

  • 构造方法中通常用的是第一个方法
  • 文件和目录可以通过File封装成对象
  • File封装的对象仅仅是一个路径名,它是可以存在的,也可以不存在

绝对路径和相对路径

Snipaste_2024-04-05_09-29-10.png
绝对路径带盘符,相对路径对于当前工程中写模块名+文件即可

常用方法

创建

Snipaste_2024-04-05_09-31-19.png

删除

Snipaste_2024-04-05_09-35-29.png
注意

  • delete方法直接删除不走回收站(平时电脑上的shift+delete一样)
  • 如果删除的是一个文件,可以直接删除
  • 如果删除的是一个文件夹,需要先删除文件夹中的内容,最后才能删除文件夹

判断和获取

Snipaste_2024-04-05_09-40-59.png
注意
如果创建File对象时输入的是相对录井,同getAbsolutePath()方法还是获取绝对路径

高级获取

Snipaste_2024-04-05_09-56-07.png
注意

  • 当调用者不存在时,返回null
  • 当调用者是一个文件时,返回null
  • 当调用者是一个空文件夹时,返回一个长度为0的数组
  • 当调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
  • 当调用者是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏内容

IO流

概述

I流:将在磁盘文件中的存储的数据读取到内存中(读数据)
O流:将在内存中的数据写入到磁盘文件(写数据)

解决问题

以前存储数据的做法:通过变量,数组,集合存储数据,都不能永久化存储,因为数据是存储在内存中,只要代码运行结束,所有数据就会丢失

  1. 将程序中存储的数据写入到文件中,实现永久化存储
  2. 将文件中的数据读取到内存中(Java程序)

内存在读,内存在写

分类

InputStream:输入流

  • 字节输入流
  • 字符输入流

OutputStream:输出流

  • 字节输出流
  • 字符输出流

字节流:万能流(所有类型的文件都可以读写)
字符流:通常用于针对文本文件进行读写操作

  • 纯文本文件:使用计算机的记事本软件打开能看得懂的文件

书写IO流的套路

  1. 创建
    1. 实例化不同的IO流
  2. 进行操作(读,写)
    1. 读:read()
    2. 写:write()
  3. 关闭
    1. close()

字节输出流

遵循上面的套路

  1. 创建

OutputStream是一个抽象类,得用它的子类来实例化(FileOutputStream)
创建字节输出流的对象的时候,如果文件不存在,就创建;如果文件存在,将该文件中的内容清空

  1. 写数据

Snipaste_2024-04-05_14-42-50.png
要想换行:加换行符

os.write("\r\n".getBytes());

不同的操作系统,换行符各不相同
Snipaste_2024-04-05_14-49-14.png
3.关流
os.close();
注意
要不想在写入时让文件中数据清空,可以在创建时,在文件名后面加true
Snipaste_2024-04-05_14-52-14.png

字节输入流

  1. 创建

InputStream也是抽象类,用其子类进行实例化(FileInputStream)
这里和输出流不同的是,如果文件不存在,就会报错

  1. 读取

读取出来的是文件中数据的码表值;当读取到的值为-1时,说明当前读取到文件末尾
int read();
提高读取效率,可以用int read(byte[] buf);
从输入流读取最多buf.length个字节的数据,返回的是真实读到的数据个数
byte buf = new byte[1024];
int len = is.read(buf);

  1. 关流(释放资源)

is.close();

练习(文件复制)

  1. 创建字节输入流(与源文件关联)
  2. 创建字节输出流(与目标文件关联)
  3. 使用字节输入流,读取源文件中的字节数据
  4. 把读取到的字节数据写入到目标文件
  5. 循环3,4,直到读取到的值为-1时结束循环
  6. 释放资源
 public static void main(String[] args) throws IOException {
        //1.字节输入流
        InputStream is = new FileInputStream("源文件");

        //2.字节输出流
        OutputStream os = new FileOutputStream("目标文件", true);

        //3.读,写
        int data = 0;
        while (data != -1){
            data = is.read();
            os.write(data);
        }

        //释放资源
        is.close();
        os.close();

    }
}

IO资源的处理

在创建和操作的过程中我们都会有编译时异常,在平常练习中进行抛出,而在实际开发中要进行try…catch处理,但是我们释放资源这一步必须要执行,所有,
JDK7之前,增加了个try…catch…finally块,在finally代码块的代码一定会执行,所以可以将释放资源的代码放到finally代码块中
而在JDK7时,对流的释放做了优化,使用try-with-resource语句,确保每个资源在语句结束时自动关闭(不需要写os.close()😉
但是这个有个前提是资源对象有实现AutoCloseable接口

    try ( FileInputStream fis1 = new FileInputStream("day11_demo\\a.txt") ; 
	FileInputStream fis2 = new FileInputStream("day11_demo\\b.txt") ) 
    {
        // 读写数据
    } catch (IOException e) {
        处理异常的代码...
    }

字节流缓冲流(高效流)

Snipaste_2024-04-05_17-15-00.png
剩下的读写和关流与上面的基础流(字节流、字符流)用法一样

//构造方法: public  BufferedInputStream( InputStream  is )

BufferedInputStream bis = new BufferedInputStream( new FileInputStream("关联文件") );
//构造方法: public  BufferedOutputStream( OutputStream  os )

//覆盖写入
BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream("关联文件") );


//追加写入 (构造方法的第二个参数为true)
FileOutputStream fos = new FileOutputStream("关联文件" , true); //追加写入
BufferedOutputStream bos = new BufferedOutputStream(  fos );//当前流有具有追加写入能力

Properties类

介绍
  1. 作为Map集合的子类存在(存储的数据:key,value)
  2. 可以结合IO流使用(读,写)

不需要加泛型,默认存储的是Object类型

构造方法

Properties prop = new Properties();

常用方法

Snipaste_2024-04-05_17-24-09.png
Snipaste_2024-04-05_17-24-39.png

作用

读取开发中使用到的.properties配置文件

ResourceBundle工具类

Snipaste_2024-04-05_17-26-01.png

递归

介绍

递归就是方法自己调用自己的结果,是应用是方法上的解决方案
递归=递进+回归

组成

递归前进段,边界条件,递归返回段
当边界条件不满足是,递归前进
当边界条件满足时,递归返回

执行过程

Snipaste_2024-04-05_19-57-08.png

隐患

每次递归方法都会入栈,从而占用栈内存资源,当递归次数太多,栈内存用完时会造成内存溢出错误

案例

查看某个文件中的所有Java文件

    public static void main(String[] args) {
        File file = new File("要查看的文件");

        getJavaFile(file);
    }
    public static void getJavaFile(File file){
        if (file == null){
            throw new RuntimeException("文件不能为空");
        }

        File[] files = file.listFiles();

        for (File f : files) {
            if (f.isFile()){
                if(f.getName().endsWith(".java")){
                    System.out.println(f.getAbsolutePath());
                }
            } else if (f.isDirectory()) {
                getJavaFile(f);
            }

        }
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

详解protected访问限定符

1.同一个包中的同一类 package demo1;public class Test1 {protected int a 10;protected void b() {System.out.println("这是protected修饰的成员方法");}public static void main(String[] args) {Test1 test new Test1();System.out.println(test.a);test.b()…

Vue学习笔记-S1

1 什么是Vue Vue是一款用于构建用户界面的渐进式JavaScripte框架,可基于数据渲染用户页面. 1.1 Vue的知识架构 Vue核心包:声明式渲染、组件系统Vue构建:客户端路由、状态管理、构建工具局部使用Vue:快速入门、常用指令、生命周…

4.5日学习打卡----学习Apache HttpClient 5

4.5日学习打卡 目录: 4.5日学习打卡Apache Commons HttpClient简介 Apache HttpClient 5简介依赖HttpClient 5 GET 请求HttpClient 5 Fluent GETHttpClient5 GET 请求参数HttpClient 5 POST 请求HttpClient 5 Fluent POSTHttpClient5 POST JSON 参数HttpClient 5 设…

什么是地理信息系统(GIS),它能为我们做什么?

当您准备从事GIS相关职业或准备建设一个GIS相关的系统时,您需要对GIS有一个大概的整体了解。这篇文章很适合您从宏观了解GIS当前的整体情况及发状况!希望这篇文章对您有所帮助! 什么是地理信息系统? GIS 代表地理信息系统。…

linux时间同步工具chrony的配置和时间设置的相关说明

目录 目录 介绍 1.搭建ntp服务器 2.配置ntp客户端 3.其他设置 4.客户端无法进行时间同步 介绍 目前比较流行的时间同步工具有ntpd和chrony,ntpd采用123/UDP端口通信,chrony采用323/UDP端口通信。Centos7以上版本默认安装chrony服务来同步时间&#x…

go | 上传文件 | tcpdumpwireshark 抓包分析

go 上传文件 package mainimport ("fmt""log""github.com/gin-gonic/gin" )/*执行命令: curl -X POST http://localhost:8080/upload -F "file/path/main.zip" -H "Content-Type:multipart/form-data"*/ func m…

Python实战 | 如何使用 Python 调用 API

本文目录 一、前言 二、调用浙江数据开放平台API获取数据 (一)API获取数据的流程 (二)HTTP请求 (三)API的参数 (四)使用request库获取API数据 三、调用百度通用翻译API 四、总结 本文…

vscode-task.json自定义任务

以下所有内容,参考自VScode官方文档: vscode_task-docs任务说明文档vscode_variables-reference-docs变量说明文档vscode addtional docs for task 说明: 博客内容均为个人理解,有错误请移步官方文档, 查阅文档, 纠正错误. 这篇blog记录一下个人对vscode任务(task)的使用方法 个…

C++中的STL——vector类的基本使用

目录 vector介绍 vetor类定义 vector常见构造 vector类中的容量操作 size()函数与capacity()函数 resize()函数 reserve()函数 max_size()函数 vector类中的数据遍历操作 operator[]()与at()函数 vector类中的迭代器遍历 正向遍历begin()和end()迭代器——非const …

adobe stock会员开通付费付款订阅充值教程/adobe stock免费白嫖一个月

登录adobe stock的官网,点击你想要下载的视频,然后点击免费下载,我们点击免费试用按钮,可以看到非常贵,需要80美金一个月,用fomepay可以免费白嫖一个月 点击获取一张虚拟信用卡,就可以白嫖一个…

基于JAVA+SpringBoot+Vue的前后端分离的大学健康档案管理系统

一、项目背景介绍: 随着社会的发展和科技的进步,人们越来越重视健康问题。大学作为培养人才的摇篮,学生的健康状况直接影响到国家的未来。然而,传统的大学健康档案管理方式存在诸多问题,如信息不透明、数据分散、更新不…

【MySQL数据库 | 第二十二篇】深入了解MySQL锁

前言: MySQL作为世界上最流行的关系型数据库管理系统之一,广泛应用于各种规模和类型的应用程序中。在处理高并发和大规模数据操作时,确保数据的一致性和完整性是至关重要的。而MySQL的锁机制正是在这样的背景下发挥着重要作用。 MySQL锁机制…

LeetCode 热题 100 | 贪心算法

目录 1 121. 买卖股票的最佳时机 2 55. 跳跃游戏 3 45. 跳跃游戏 II 4 763. 划分字母区间 菜鸟做题,语言是 C 1 121. 买卖股票的最佳时机 解题思路: 维护一个变量 max_pricemax_price 用于存储排在 i 天之后的股票最高价格第 i 天的最高利润 …

地质地貌卫星影像集锦(三 矿产资源篇)

1. 元古代沉积岩的抬升 这个地区位于Leigh Creek中部,距离澳大利亚南部的阿德莱德约500km,弗林德斯山脉的北面是Gawler克拉通。弗林德斯山脉是由元古代沉积岩抬升后形成的块体,在其之下的是寒武纪的岩石,它座落在距阿德莱德北…

唐刘:关于产品质量的思考 - 我的基本认知

我在文章《 TiDB in 2023 - 一次简单的回顾 》 中提到了一个我一直以来面临的问题:每次 TiDB 发布新版本后,我如何能够非常自信地告诉客户,这个版本的质量很好,大家可以放心使用呢? 坦白地说, 这个问题并不…

[HackMyVM]靶场Deeper

难度:Easy kali:192.168.56.104 靶机:192.168.56.148 端口扫描 ┌──(root㉿kali2)-[~/Desktop] └─# nmap 192.168.56.148 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-05 19:55 CST Nmap scan report for 192.168.56.148 Host is up (0.00013s latency). N…

数据结构:详解【树和二叉树】

1. 树的概念及结构(了解) 1.1 树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝…

智慧公厕升级为多功能城市智慧驿站,助力智慧城市发展

在现代城市的建设中,公共厕所作为基础必备的民生设施,一直是城市管理的重要组成部分。随着科技的不断发展,智慧公厕应运而生,成为了公共厕所信息化、数字化、智慧化的应用解决方案。而近年来,智慧公厕也进行了升级发展…

20240309web前端_第三周作业_教务系统页面

作业&#xff1a;教务系统页面 成果展示&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1…

拥塞控制算法系列之:Swift-谷歌2020年SIGCOM-包级别端到端TIMELY拥塞控制算法

核心要点&#xff1a; 谷歌 2020 SIGCOM基于delay的AIMD拥塞拆分EC和FC&#xff0c;时延敏感场景优势分别计算EC和FC的wnd&#xff08;最核心&#xff09;保障吞吐和低延迟。Swift 因利用延迟的简单性和有效性而闻名包级别的论文&#xff1a;https://dl.acm.org/doi/pdf/10.11…