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

Java学习笔记之----I/O(输入/输出)一

        在变量、数组和对象中存储的数据是暂时存在的,程序结束后它们就会丢失。想要永久地存储程序创建的数据,就需要将其保存在磁盘文件中(就是保存在电脑的C盘或D盘中),而只有数据存储起来才可以在其他程序中使用它们。Java的I/O技术可以将数据保存到文本文件、二进制文件甚至是ZIP压缩文件中,以达到永久性保存数据的要求。

目录

一   输入/输出流

 二 File类

1.文件的创建与删除 

第一种构造方法

第二种构造方法

第三种构造方法

2.File类的使用

(1)获取文件信息

(2)文件夹的操作

1.创建单层文件夹

2.创建多层文件夹

3.删除文件夹 

​编辑4. 获取文件夹下的所有子文件


 

一   输入/输出流

😶‍🌫️😶‍🌫️😶‍🌫️流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。I/O(Input/Output,输入/输出)流提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。虽然IO流通常与磁盘文件存取有关,但是程序的源和目的地也可以是键盘、鼠标、内存或显示器窗口等。
Java有数据流处理输入/输出模式,程序从指向源的输入流中读取源中的数据,如图所示。源可以是文件、网络、压缩包或其他数据源。

 Java语言定义了许多类专门负责各种方式的输入/输出,这些类都被放在java.io包中。其中,所有
输入流类都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类;而所有输出
流都是抽象类OutputStream(字节输出流)或抽象类Writer(字符输出流)的子类。

 二 File类

File 类是java.io包中唯一代表磁盘文件本身的类。File类定义了一些与平台无关的方法来操作文件,可以通过调用File类中的方法,实现创建、删除、重命名文件等操作。File类的对象主要用来获取文件本身的一些信息,如文件所在的目录、文件的长度、文件读写权限等。数据流可以将数据写入文件中,文件也是数据流最常用的数据媒体。

1.文件的创建与删除 

第一种构造方法

:File(String pathname)

该构造方法通过将给定的路径名字符串转换为抽象路径名来创建一个新File实列。

file创建中的抽象路径的三种表示方法 ,如图1,2,3;

图一:  在MyProject下创建一个word.txt。此时word.txt不在src的包里面。

图二: word.txt与Dome在同一个包中 

图三: 

那么我们来看一下决定路径下如何创建文件:

 1.首先,我们在c盘里面创建一个文件夹,名字为text;

2.然后 ,在text文件夹中创建一个文本,文本名为word.txt;

3.查看绝对路径,这里我们可以右键看属性,也可以直接双击上面的标题;

第二种构造方法

:File(String parent,String chid)

该构造方法根据定义的父路径和子路径字符串(包含文件名)创建一个新的File对象。语法如下:

new File(String parent,String child)

▢parent:父路径字符串,如D:/或D:/doc。

也就是说他它所在的位置信息。
▢child:子路径字符串,如letter.txt。

文档,项目的名字。

第三种构造方法

:File(File f, String child)

该构造方法根据f抽象路径名和child路径名字符串创建一个新File实例。语法如下:

new File(File f,String child)

▢f:父路径对象,如D:/doc/。
▢child:子路径字符串,如letter.txt。

 【源码】

package my;import java.io.File;public class Demo {public static void main(String[] args) {/** 项目下的路径(默认路径):word.txt* 包中的文件路径:src/my/word.txt* 注意: 可以用/表示文件夹*       可以用\\表示文件夹(转义字符)* 绝对路径:C:\\text\\word.txt*/     File f1 = new File("C:\\text\\word.txt");//第一种构造方法File f2 = new File("C:\\text\\","word.txt");//第二种构造方法/** parent:C:\\text\\(文件在c盘的文件夹text中)* child:word.txt(它的文档名字是word.txt)*/File dir = new File("C:\\text\\");//文件夹File f3 = new File(dir,"word.txt");//第三种构造方法/** 也可以用下面的式子表示* File f3 = new File(new File("C:\\text\\"),"word.txt");*/System.out.println(f1.getAbsolutePath());System.out.println(f2.getAbsolutePath());System.out.println(f3.getAbsolutePath());System.out.println(f1==f2);/** f1和f2不相等是因为它们是通过不同的构造方法创建的对象。* 尽管它们的路径和文件名都相同,但它们是两个不同的对象。* 比较两个对象时,需要使用.equals()方法而不是==运算符。* 所以应该使用f1.equals(f2)来比较它们是否相等。* 他们只是一个代表,好比a与b是朋友,c也与b是朋友,而a与c并不一定是朋友。*/System.out.println(f1.equals(f2));}
}

2.File类的使用

(1)获取文件信息

File类提供了很多方法用来获取文件本身信息。如表:

【代码】 

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Demo {public static void main(String[] args) {File f1 = new File("C:\\text\\word.txt");System.out.println("文件是否存在:"+f1.exists());System.out.println("文件名:"+f1.getName());System.out.println("文件的绝对路径:"+f1.getAbsolutePath());System.out.println("文件是否隐藏:"+f1.isHidden());System.out.println("文件大小:"+f1.length());Date date = new Date(f1.lastModified());SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");System.out.println("文件最后的修改时间:"+sdf.format(date));boolean f = f1.delete();System.out.println("文件是否删除成功:"+f);try {boolean fl = f1.createNewFile();System.out.println("创建文件是否成功:"+fl);} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}}

【运行结果】 

 运行完后我们会发现word文件大小变为0了,这是因为我们删除了,又重新创建的原因。

(2)文件夹的操作

1.创建单层文件夹

创建单层文件夹用mkdir()或mkdirs()方法。

package mt;import java.io.File;public class Demo {public static void main(String[] args) {File dir = new File("dir");boolean flag = dir.mkdir();//创建文件夹System.out.println("创建文件夹是否成功:"+flag);}}

创建前我们可以看到左侧没有dir文件: 

运行刷新后:

我们可以发现左侧出现了dir文件夹的图标。 

2.创建多层文件夹

创建多层文件夹我们要用mkdirs()方法;

【代码】 

package mt;import java.io.File;public class Demo {public static void main(String[] args) {File dir = new File("dir/dir2/dir3/dir4/");boolean flag = dir.mkdir();//创建文件夹boolean flag2 = dir.mkdirs();//创建文件夹及其父文件夹System.out.println("创建文件夹是否成功:"+flag);System.out.println("创建多层文件夹是否成功:"+flag2);}}

【运行结果】 

3.删除文件夹 

删除文件夹用delete()方法,默认删除最后一个文件夹。

【代码】 

package mt;import java.io.File;public class Demo {public static void main(String[] args) {File dir = new File("dir/dir2/dir3/dir4/");boolean flag = dir.mkdir();//创建文件夹boolean flag2 = dir.mkdirs();//创建文件夹及其父文件夹System.out.println("创建文件夹是否成功:"+flag);System.out.println("创建多层文件夹是否成功:"+flag2);boolean de1 = dir.delete();System.out.println("删除文件夹是否成功:"+de1);}}

【运行结果】 

4. 获取文件夹下的所有子文件

 【代码】

package mt;import java.io.File;public class Demo {public static void main(String[] args) {File f = new File("C:\\windows\\");File files[] = f.listFiles();for(File tmp:files) {if(tmp.isFile()) {System.out.println("文件:"+tmp.getName());}else if(tmp.isDirectory()){System.out.println("文件夹:"+tmp.getName());}}}}

【运行结果】 

相关文章:

Java学习笔记之----I/O(输入/输出)一

在变量、数组和对象中存储的数据是暂时存在的,程序结束后它们就会丢失。想要永久地存储程序创建的数据,就需要将其保存在磁盘文件中(就是保存在电脑的C盘或D盘中),而只有数据存储起来才可以在其他程序中使用它们。Java的I/O技术可…...

介绍GitHub

GitHub 是一个基于互联网的源代码托管平台,可以帮助软件开发者存储和管理源代码,方便团队协作和版本控制。GitHub 的主要功能包括: 代码托管:开发者可以在 GitHub 上创建远程代码仓库,存储和管理他们的源代码。 版本控…...

js常用的循环遍历

1.while 循环 While语句包括一个循环条件和一段代码块&#xff0c;只要条件为真&#xff0c;就不断循环执行代码块。 while (条件) 语句; // 或者while (条件) 语句;//举例&#xff1a; var i 0; while (i < 100) { console.log(i 当前为&#xff1a; i); i i 1; }2.…...

存量时代的面经

spring-series,感谢这个项目的作者,还有springboot_learn 这个项目 Spring, 说来惭愧,接触spring 已经接近十年了 通过这个项目,我把spring重写的学习了一遍 1,早上先debug 的一个项目的源码是 springboot_security 在这里插入代码片/****: Creating filter chain:org…...

Python入门教程 | Python 流程控制语句

​ 程序流程控制的三种结构 1.顺序结构 计算机执行程序的步骤是从上到下依次执行 2.选择结构&#xff08;条件控制&#xff09; Python 条件语句是通过一条或多条语句的执行结果&#xff08;True 或者 False&#xff09;来决定执行的代码块。 可以通过下图来简单了解条件…...

力扣:83. 删除排序链表中的重复元素(Python3)

题目&#xff1a; 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚…...

iKeyPrime完美解4G信号,可以登录iCloud,有消息通知,支持最新iOS16.6。

iKeyPrime是一款绕过激活锁界面的解锁工具&#xff0c;可以激活所有iPhone苹果手机&#xff0c;二网/三网恢复信号&#xff0c;并且支持插卡接打电话、收发短信、4G流量上网&#xff0c;支持iCloud登录&#xff0c;有消息通知&#xff0c;支持iPhone5S~X的所有型号&#xff0c;…...

micro python 编译流程和方法,以及一部分问题解决

micro python官网 https://micropython.org/ 点击 点击对应的芯片&#xff0c;我这里是ESP32-S3 点击到git 到esp32目录下 按照指引下载安装ESP-IDF IDF版本查看连接如下&#xff1a; https://docs.espressif.com/projects/esp-idf/en/latest/esp32/versions.html 我这里选择…...

AI篇-chatgpt基本用法(文心一言也适用)

目录 &#xff08;1&#xff09;基本规则 &#xff08;2&#xff09;例子1-文章摘要 &#xff08;3&#xff09;例子2-代码生成 &#xff08;4&#xff09;文心一言链接 &#xff08;1&#xff09;基本规则 相比于搜索引擎&#xff0c;ChatGPT的优势在于其高效的想法关联和…...

Python小知识 - 使用Python进行数据分析

使用Python进行数据分析 数据分析简介 数据分析&#xff0c;又称为信息分析&#xff0c;是指对数据进行综合处理、归纳提炼、概括总结的过程&#xff0c;是数据处理的第一步。 数据分析的目的是了解数据的内在规律&#xff0c;为数据挖掘&#xff0c;并应用于商业决策、科学研究…...

Pytorch.tensor 相关用法

Torch.tensor.backward()方法的使用举例 理解optimizer.zero_grad(), loss.backward(), optimizer.step()的作用及原理 Autograd: 自动求导 import torchatorch.randn(2,2) # tensor默认requires_gradFalse a((a*3)/(a-1)) print(a.requires_grad) print(a.grad_fn) # leaf …...

信维通信投资者关系活动:揭示5G创新实践,展望未来发展

信维通信于近期举办了一场面向投资者的关系活动&#xff0c;旨在揭示公司在5G时代的创新实践和展望未来发展计划。这场活动吸引了众多投资者和证券分析师的关注&#xff0c;他们期待了解信维通信在5G市场的布局和竞争优势。 在活动当天&#xff0c;信维通信的投资者关系部门负…...

AOP进阶-通知顺序

通知顺序 当多个切面的切入点都匹配到目标方法&#xff0c;目标方法运行时&#xff0c;多个通知都会被执行 执行顺序 不同切面类中&#xff0c;默认按照切面类的类名称字母排序 目标方法前的通知方法&#xff1a;字母排名靠前的先执行目标方法后的通知方法&#xff1a;字母排…...

Sui流动性质押黑客松|本周Workshop预告

Sui流动性质押黑客松正在如火如荼的报名中&#xff0c;Sui基金会现诚邀全球开发者前来参与&#xff0c;助力资产再流通。了解黑客松详情&#xff1a;Sui流动性质押黑客松开启报名&#xff0c;赢取千万美金质押和奖励&#xff01; 黑客松官网&#xff1a;Sui Liquid Staking Ha…...

数学建模:线性与非线性优化算法

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 数学建模&#xff1a;线性与非线性优化算法 优化算法是指在满足一定条件下,在众多方案中或者参数中最优方案,或者参数值,以使得某个或者多个功能指标达到最优,或使得系统的某些性能指标达到最大值或者最小…...

数学建模--粒子群算法(PSO)的Python实现

目录 1.开篇提示 2.算法流程简介 3.算法核心代码 4.算法效果展示 1.开篇提示 """ 开篇提示: 这篇文章是一篇学习文章,思路和参考来自:https://blog.csdn.net/weixin_42051846/article/details/128673427?utm_mediumdistribute.pc_relevant.none-task-blog-…...

【C++】STL-函数对象-内建函数对象

0.前言 1.算术仿函数 #include <iostream> using namespace std;// STL-内建函数对象-算术仿函数 #include<functional> // 内建函数对象头文件//以下举例两个仿函数 -- negate and plus// negate 一元仿函数 取反仿函数 void test01() {negate<int>n;cout …...

Redis 教程 - Redis 基本操作

Redis 教程 - Redis 基本操作 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存数据库&#xff0c;它提供了键值对存储和多种数据结构的支持&#xff0c;被广泛应用于缓存、消息队列、计数器等场景。本教程将介绍 Redis 的基本操作&#xff0c;包括连接…...

FreeRTOS中断与任务之间同步(Error:..\..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,422 )

前言&#xff1a; FreeRTOS中&#xff0c;中断需要注意几点&#xff1a; 何时使用中断&#xff1b;中断服务函数&#xff08;ISR&#xff09;要处理的数据量有多大&#xff0c;通常我们希望中断的切换越快越好&#xff0c;也就是说&#xff0c;ISR尽量采用耗时较少的处理方式…...

WebRTC清晰度和流畅度

WebRTC清晰度和流畅度 flyfish WebRTC提供了4种模式DISABLED&#xff0c;MAINTAIN_FRAMERATE&#xff0c;MAINTAIN_RESOLUTION&#xff0c;BALANCED // Based on the spec in // https://w3c.github.io/webrtc-pc/#idl-def-rtcdegradationpreference. // These options are …...

[通俗易懂]从“生产者-消费者”模型秒懂Java泛型PECS原则(别再死记硬背了)

1. 从超市购物理解PECS原则 想象你正在超市采购水果。水果区有各种水果篮&#xff1a;有的专放苹果&#xff0c;有的专放香蕉&#xff0c;还有个"混合水果区"放各种水果。这时候你会发现两个有趣的现象&#xff1a; 从水果区取水果&#xff1a;你可以从任何水果篮里安…...

AI 说错了怎么办——给生成性 Agent 装上 Self-RAG 自审循环

AI 说错了怎么办——给生成性 Agent 装上 Self-RAG 自审循环Agent 早就跑通了&#xff0c;但有一条横切线一直没单独写过&#xff1a;深度阅读那种动辄一千多字的输出&#xff0c;怎么知道 LLM 是不是在自圆其说。这周回过头来补这一篇&#xff0c;顺便把本周做的几个小改动一并…...

手势识别技术全解析:从光学、雷达到IoT集成的实战指南

1. 项目概述&#xff1a;从“看见”到“看懂”&#xff0c;手势交互的破局点最近在跟进一个智能家居的集成项目&#xff0c;客户提了个挺有意思的需求&#xff1a;能不能让家里的灯、空调、窗帘&#xff0c;不用说话&#xff0c;也不用找手机&#xff0c;就靠“挥挥手”来控制&…...

探索DeepMosaics:当AI遇见图像隐私保护与修复的艺术

探索DeepMosaics&#xff1a;当AI遇见图像隐私保护与修复的艺术 【免费下载链接】DeepMosaics Automatically remove the mosaics in images and videos, or add mosaics to them. 项目地址: https://gitcode.com/gh_mirrors/de/DeepMosaics 在数字内容创作与分享日益普…...

教育机构开设AI课程时利用Taotoken管理学生实验用API

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 教育机构开设AI课程时利用Taotoken管理学生实验用API 在高校或培训机构开设大模型应用相关课程时&#xff0c;为学生提供一个统一、…...

U-Boot MMC DM驱动移植实战:从设备树配置到调试排错

1. 项目概述与核心价值最近在为一个基于i.MX6UL的工控板卡适配新的eMMC存储芯片时&#xff0c;又和U-Boot的MMC驱动打了一次交道。这让我想起&#xff0c;很多嵌入式开发者在进行板级移植或更换存储介质时&#xff0c;面对U-Boot中那套基于设备模型&#xff08;Device Model, D…...

NotebookLM生物技术研究落地难?92%实验室尚未启用的3个隐藏功能(内部白皮书首次公开)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM生物技术研究落地难&#xff1f;92%实验室尚未启用的3个隐藏功能&#xff08;内部白皮书首次公开&#xff09; NotebookLM 作为 Google 推出的实验性 AI 助手&#xff0c;其在生物技术领域的…...

Next.js 14全栈样板工程解析:集成Prisma与NextAuth的现代Web开发实践

1. 项目概述&#xff1a;一个为现代Web应用量身定制的启动器如果你正在寻找一个能让你跳过繁琐的初始化配置&#xff0c;直接进入核心业务逻辑开发的Next.js项目起点&#xff0c;那么nemanjam/nextjs-prisma-boilerplate这个项目很可能就是你需要的。这不是一个简单的“Hello W…...

基于ESP32与Pure Data的无线音乐控制器:从硬件到软件的完整实现

1. 项目概述与核心思路 如果你对用代码做音乐感兴趣&#xff0c;或者玩过像Pure Data、Max/MSP这样的可视化音频编程环境&#xff0c;那你肯定想过一个问题&#xff1a;能不能把物理世界里的动作&#xff0c;比如触摸、倾斜、敲击&#xff0c;直接变成控制音乐的声音参数&#…...

Python封装币安API:从零构建Binance-Claw量化数据工具

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“Binance-Claw”&#xff0c;作者是Scandalousnessmotley216。光看这个名字&#xff0c;可能有点摸不着头脑&#xff0c;“Claw”是爪子的意思&#xff0c;难道是要“抓取”币安的数据&#xff1f;点…...