java基础-IO
1、基础概念
1.1、文件(File)
文件的读写可以说是开发中必不可少的部分,因为系统会存在大量处理设备上的数据,这里的设备指硬盘,内存,键盘录入,网络传输等。当然这里需要考虑的问题不仅仅是实现,还包括同步,读写熟读,文件类型等等都需要考虑在具体的项目中。
Java 的标准库 java.io
提供了File类的实例对象来操作文件
1.2、流(Stream)
I/O是Input/Output的缩写, I/O技术是非常实用的技术,用于处理设备之间的数据传输。如读/写文件,网络通讯等。
Java程序中,对于数据的输入/输出操作以“流(stream)” 的方式进行。
java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。
2、文件(File)
2.1、File类创建
名称 | 说明 |
public File(String pathname) | 根据文件路径创建对象 |
public File(String parent,String child) | 从父路径名字符串和子路径名字字符串创建文件对象 |
public File(File parent,String child) | 根据父路径对应文件对象和子路径名字字符串创建对象 |
2.2、常用方法
public String getAbsolutePath() 获取绝对路径
public String getPath() 获取路径
public String getName() 获取名称
public String getParent() 获取上层文件目录路径。若无,返回null
public long length() 获取文件长度(即:字节数)。不能获取目录的长度。
public long lastModified() 获取最后一次的修改时间,毫秒值
public String[] list() 获取指定目录下的所有文件或者文件目录的字符串数组
public File[] listFiles() 获取指定目录下的所有文件或者文件目录的File对象数组
public boolean isDirectory() 判断是否是文件目录
public boolean isFile() 判断是否是文件
public boolean exists() 判断是否存在
public boolean canRead() 判断是否可读
public boolean canWrite() 判断是否可写
public boolean isHidden() 判断是否隐藏
2.3、实例
public class FileTest {public static void main(String[] args) throws IOException {//1、设置目录名称String filePath = "H:\\test";//2、设置文件名称String fileName = "test.txt";//添加文件目录File file = new File(filePath);//1、判断是否存在目录boolean exists = file.exists();System.out.println("路径"+filePath+"在磁盘中是否存在:"+exists);//2、不存在,创建目录if (!exists) {boolean b = file.mkdirs();// 在磁盘中指定路径下创建目录System.out.println("创建目录是否成功:"+b);}else {System.out.println("创建目录已经存在");}//3、再判断是否存在目录boolean exists1 = file.exists();System.out.println("路径"+filePath+"在磁盘中是否存在:"+exists1);//判断传入的抽象路径名是否是一个在磁盘中已存在的文件System.out.println("判断传入的抽象路径名是否是一个在磁盘中已存在的文件:"+file.isFile());// false//判断传入的抽象路径名是否是一个在磁盘中已存在的目录System.out.println("判断传入的抽象路径名是否是一个在磁盘中已存在的目录:"+file.isDirectory());// trueSystem.out.println("获取绝对路径"+file.getAbsolutePath());System.out.println("获取路径"+file.getPath());System.out.println("获取名称"+file.getName());System.out.println("获取上层文件目录路径。若无,返回null"+file.getParent());System.out.println("获取文件长度(即:字节数)。不能获取目录的长度"+file.length());System.out.println("获取最后一次的修改时间,毫秒值"+new Date(file.lastModified()));System.out.println("获取指定目录下的所有文件或者文件目录的字符串数组:"+file.list());System.out.println("获取指定目录下的所有文件或者文件目录的File对象数组:"+file.listFiles());//从磁盘中删除指定文件路径下的文件或者文件目录
// file.delete();
// System.out.println("再次判断传入的抽象路径名(目录/普通文件)在磁盘中是否存在:"+file.exists());// falseSystem.out.println("=================================================================================");//添加文件File f = new File(filePath,fileName);//1、判断是否存在目录boolean e = f.exists();System.out.println("路径"+filePath+"在磁盘中是否存在:"+e);//2、不存在,创建文件if (!e) {boolean b = f.createNewFile();System.out.println("创建文件是否成功:"+b);}else {System.out.println("创建文件已经存在");}//3、再判断是否存在目录boolean e1 = f.exists();System.out.println("路径"+filePath+"在磁盘中是否存在:"+e1);// 判断传入的抽象路径名是否是一个在磁盘中已存在的文件System.out.println("判断传入的抽象路径名是否是一个在磁盘中已存在的文件:"+f.isFile());// false// 判断传入的抽象路径名是否是一个在磁盘中已存在的目录System.out.println("判断传入的抽象路径名是否是一个在磁盘中已存在的目录:"+f.isDirectory());// trueSystem.out.println("判断是否可读"+f.canRead());System.out.println("判断是否可写"+f.canWrite());System.out.println("判断是否隐藏"+f.isHidden());System.out.println("获取绝对路径"+f.getAbsolutePath());System.out.println("获取路径"+f.getPath());System.out.println("获取名称"+f.getName());System.out.println("获取上层文件目录路径。若无,返回null"+f.getParent());System.out.println("获取文件长度(即:字节数)。不能获取目录的长度"+f.length());System.out.println("获取最后一次的修改时间,毫秒值"+new Date(f.lastModified()));System.out.println("获取指定目录下的所有文件或者文件目录的字符串数组:"+f.list());System.out.println("获取指定目录下的所有文件或者文件目录的File对象数组:"+f.listFiles());// 从磁盘中删除指定文件路径下的文件或者文件目录
// f.delete();
// System.out.println("再次判断传入的抽象路径名(目录/普通文件)在磁盘中是否存在:"+file.exists());// false}
}
3、流的分类
- 按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)
- 按数据流的流向不同分为:输入流,输出流
补充:
- 按流的角色的不同分为:节点流,处理流
节点流:直接从数据源或目的地读写数据
处理流:不直接连接到数据源或目的地,而是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。
3.1、IO 流体系图
3.2、派生类
Java的IO流共涉及40多个类,实际上非常规则,都是从以上4个抽象基类派生的,并且子类名称都是以其父类名作为子类名后缀。
4、字节流
字节流分为字节输入流InputStream和字节输出流OutputStream,其中输入与输出是相对于内存而言的;输入即从文件中读出数据输入至内存;输出即从内存向文件中输出数据。
从jdk8文档中,InputStream 方法如下:
OutputStream方法如下:
从 Java 9 开始,InputStream 新增加了多个实用的方法:
readAllBytes():读取输入流中的所有字节,返回字节数组。
readNBytes(byte[] b, int off, int len):阻塞直到读取 len 个字节。
transferTo(OutputStream out):将所有字节从一个输入流传递到一个输出流。
4.1、实例
public class FileStreamTest {public static void main(String[] args) throws IOException {//写入FileOutputStream fileOutputStream = new FileOutputStream("H:\\test\\test.txt");String s = "test123";// 将字符串转换为byte数组byte[] outBytes = s.getBytes();fileOutputStream.write(outBytes);fileOutputStream.flush();fileOutputStream.close();System.out.println("=================================================================");//读取FileInputStream fileInputStream = new FileInputStream("H:\\test\\test.txt");//1、返回从该输入流中可以读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。int available = fileInputStream.available();System.out.println("available:" + available);//2、跳过并丢弃来自此输入流的 2字节数据。
// long skip = fileInputStream.skip(2);
// System.out.println("skip:" + skip);//3、读取文件内容,为了减少IO,我们创建一个Byte数组作为接收缓冲区byte[] inBytes = new byte[available];int read;//4、从输入流读取一些字节数,并将它们存储到缓冲区 b 。while ((read = fileInputStream.read(inBytes)) != -1) {// 把byte数组转换成字符串System.out.print(new String(inBytes, 0, read));}if (fileInputStream != null) {fileInputStream.close();}}
}
5、字符流
已经有字节流了,可以读取任意文件,为什么还要有字符流呢?
- 对于字符文件,先作为字节传输,再转成字符,耗时耗力。
- 对于字符文件,转成字节之后,再转回来,如果是中文,很容易乱码。
5.1、Reader
5.2、Writer
5.3、实例
public class FileStreamTest {public static void main(String[] args) throws IOException {FileWriter fw = new FileWriter("H:\\test\\test.txt");String s = "少年";fw.write(s); // 将字符串写入文件// 关闭资源fw.close();FileReader fr = new FileReader("H:\\test\\test.txt");String str = new String();int b;// 循环读取while ((b = fr.read())!=-1) {str = str + (char)b;}System.out.println("str:"+str);// 关闭资源fr.close();}
}
- flush :刷新缓冲区,流对象可以继续使用。
- close :先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。
相关文章:

java基础-IO
1、基础概念 1.1、文件(File) 文件的读写可以说是开发中必不可少的部分,因为系统会存在大量处理设备上的数据,这里的设备指硬盘,内存,键盘录入,网络传输等。当然这里需要考虑的问题不仅仅是实现,还包括同步…...

Java变量理解
成员变量VS局部变量的区别 语法形式:从语法形式上看,成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰…...
西南科技大学信号与系统A实验二(信号频谱分析)
一、实验目的 1.掌握用 matlab 软件绘制信号频谱的方法; 2.进一步理解抽样定理; 3.理解傅里叶变换的性质(频移特性). 二、实验原理 (一)fft 函数的调用 matlab 提供 fft 函数来计算信号 x(n)的快速离散傅里叶变换 (FFT). z 格式:y=fft(x) 计算信号 x 的快速离散傅里叶…...
C++-youtube cherno C++视频的一些知识点
对函数的调用在汇编中对应一句call func语句,其中func是一个函数的签名(signature)对程序而言,即使只有一个文件,链接器也需要链接,因为它需要链接程序入口点(entry point)一个程序的…...

sed命令
目录 一、sed 1.sed命令选项 2.语法选项 3.sed脚本格式 4.搜索替代 5.分组后向引用 1.提取版本号: 2.提取IP地址 3.提取数字权限 6.变量 二、免交互 1.多行重定向 2.免交互脚本 总结:本章主要介绍了seq和免交互的用法及相关知识 一、sed s…...

【经验分享】开发问题记录总结(持续更新)
目录 工具开发 界面类继承某自定义界面类时,出现布局混乱或者所有控件集中在左上角? 在继承自定义界面之后,以诸如 on_xxx_clicked() 模式设计的槽函数失效了? 使用pugi接口取出文本数据后,为什么该变量无法进行字符串比较&…...
MySQL导出数据库中每个表前 3000 条数据
以下是一个 Bash 脚本,它会连接到 MySQL 数据库,获取所有表名,并对每个表导出前 3000 条数据: #!/bin/bashUSERNAME"citycard" PASSWORD"密码" DATABASE"citycard" LIMIT3000# 导出数据库结构 mys…...
Spring事件注解@EventListener【观察】
一、背景 在开发工作中,我们常常会遇到这样一种情况:完成一项任务后,需要向其他模块广播消息或通知,以触发其他事件的处理。逐个发送请求固然可行,但更好的方式是采用事件监听,它是设计模式中的发布-订阅模…...
玩转Spring中强大的spel表达式!
玩转Spring中强大的spel表达式!值得推荐的好文:https://zhuanlan.zhihu.com/p/174786047...
HTTPS攻击原理 被攻击该如何防护
简单来说,HTTPS HTTP SSL/TLS。 在 HTTP 协议中,客户端通过网络传输消息与服务器进行通信。但该消息采用明文的原始格式。坏人(攻击者)很容易窃听消息。这就是我们需要 SSL/TLS 的原因。 HTTPS是一种安全的HTTP协议,…...
【.NET Core】委托(Delegate)应用详解
【.NET Core】委托(Delegate)应用详解 文章目录 【.NET Core】委托(Delegate)应用详解一、概述二、委托(Delegate)定义三、基础委托(Delegate) - 无返回值委托四、基础委托(Delegate) - 有返回值委托五、Mu…...

【LeetCode:1457. 二叉树中的伪回文路径 | 二叉树 + DFS +回文数】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...

《golang设计模式》第三部分·行为型模式-06-备忘录模式(Memento)
文章目录 1. 概述1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概述 备忘录(Memento)用于在不破坏目标对象封装特性的基础上,将目标对象内部的状态存储到外部对象中,以备之后恢复状态时使用。 1.1 角色 Originato…...

Cache学习(4):Cache分配策略Cache更新策略Cache逐出策略
Cache的数据流 常用名词 Allocation 分配Eviction 驱逐分配策略和更新策略分别为当产生Cache miss和Cache hit的时候数据流的具体行为 1 Cache分配策略(Cache Allocation Policy) Cache的分配策略是指不同情况下为数据分配Cache Line的不同行为。Cac…...
角色管理--产品经理岗
研发组织管理--角色管理--产品经理岗 定位 相对稳定和简单产品的独立产品打造者,复杂产品的辅助者 所需资质 校招新人,拥有灵性拥有基础的产品力(认知,设计,创新,推进,学习)Axur…...
SQL数据迁移实战:从产品层级信息到AB测试表
文章目录 创建表插入数据清空数据表数据迁移和筛选查询数据结论 创建表 首先,代码中定义了两个表格:dim_prod_hierarchy_info 和 app_abtest_product_info,都位于 test 数据库中。 dim_prod_hierarchy_info 表用于存储产品层级信息…...
VMware系列:VMware安装Android虚拟机
VMware系列:VMware安装Android虚拟机 一. 下载镜像这里提供了三种下载镜像方式,也就是三个下载链接,这里推荐百度网盘下载二. 使用VMware Workstation Pro 创建新的虚拟机操作系统应该可以选择任意一个,笔者只试过下图中,如果读者感兴趣可以多试几个,但笔者不保证每个都可…...

链接1:编译器驱动程序
文章目录 GNU编译器示例编译 GNU编译器 GNU编译器(GNU Compiler)是由自由软件基金会(Free Software Foundation,FSF)开发和维护的一套编译器集合。这些编译器主要用于编译各种编程语言的源代码,将其转换为…...

经典滑动窗口试题(二)
📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、水果成篮1、题目讲解2、讲解算法思路3、代码实现 二、找到字符串中所有字母异位词1、题目…...

easyexcel指定sheet页动态给行列加背景色
需求 1、easyexcel,有多个sheet页,某些sheet页的行、列动态需要加背景色。 2、扩展支持cellStyle标记单元格超过64000 import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.write.handler.…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...

C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...

消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...

【iOS】 Block再学习
iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...
如何通过git命令查看项目连接的仓库地址?
要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...