java必知必会-java IO

系列文章目录

java必知必会-java环境搭建
java必知必会-java开发工具安装与使用
java必知必会-java关键字、变量和常量
java必知必会-java数据类型和变量定义
java必知必会-java类和对象
java必知必会-java面向对象的三大特性
java必知必会-java继承与重写、重载
java必知必会-java构造方法与访问修饰符
java必知必会-java抽象类与接口
java必知必会-java常见关键字及其作用
java必知必会-java常见关键字及其作用
java必知必会-java常用api
java必知必会-java IO


文章目录

  • 系列文章目录
  • 前言
  • 一、IO概述
  • 二、IO的继承体系
  • 三、IO相关api
    • 1.java.io.File
    • 2.java.io.OutputStream
    • 3. java.io.FlieOutputStream
    • 4. java.io.ObjectOutputStream
    • 5. java.io.FilterOutputStream
    • 6.java.io.BufferedInputStream
    • 7. java.io.Writer 写入字符流的抽象类
    • 8. java.io.BufferedWriter 字符缓冲输出流,提高了IO读写速度
    • 9. java.io.PrintWriter
    • 10. java.io.OutputStreamWriter
    • 11. java.io.FileWriter
    • 12. java.io.Reader 读取字符流的抽象超类
    • 13. java.io.BufferedReader 字符缓冲输入流,提高了IO读写速度
    • 14. java.io.InputStreamReader 字节流通向字符流的桥梁:它使用指定的字符编码表读取字节并将其解码为字符
    • 15. java.io.FileReader
    • 16. flush()和close()的区别?
  • 四、 文件复制
  • 总结


前言

本文主要介绍io相关类的主要api


一、IO概述

  • IO就是将内存中的数据持久化存储到持久化设备上,使用的时候从持久化设备上读入内存
  • IO操作:当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。

二、IO的继承体系

IO.jpg

三、IO相关api

1.java.io.File

Java中把文件或者目录(文件夹)都封装成File对象

  • File(“e:\a\hello.java”);将给定路径名称字符串转换为抽象路径名创建File对象,(包括不存在文件或者文件夹)
  • boolean createNewFile()创建不存在的文件并返回true,存在false
  • boolean mkdir()创建不存在的单层文件夹并返回true,存在false
  • boolean mkdirs()创建多层文件夹
  • boolean delete()删除此抽象路径名表示的文件或空目录
  • boolean isFile()判断此抽象路径名表示的文件是否为标准文件
  • boolean isDirectory()判断此抽象路径名表示的文件是否是目录(文件夹)
  • String getAbsolutePath()获取当前File对象的绝对路径名字符串
  • String getPath()将此抽象路径名转换为一个路径名字符串
  • String getName()获取当前File对象的文件或目录的名称
  • long length()获取当前File对象的文件或文件夹的大小(字节)
  • boolean exists() 判断File对象对应的文件或目录是否存在
  • String[] list()获得抽象路径名目录的文件和目录的字符串数组,指定的目录必须是存在的目录。否则数组为null
  • File[] listFiles()获取抽象路径名目录中的File对象数组,指定的目录必须是存在的目录。否则数组为null
  • File[] listFiles(FilenameFilter filter)返回File的目录中满足过滤器的文件和目录抽象路径名数组
  • File[] listFiles(FileFilter filter)返回File的目录中满足过滤器的文件和目录抽象路径名数组
  • FilenameFilter接口:过滤文件名
  • boolean accept(FIle dir,String name)测试指定路径名是否包含在某个路径列表中中
  • FileFilter接口:过滤文件或者文件夹
  • boolean accept(File pathname)测试指定抽象路径名是否应该包含在某个路径名列表中

2.java.io.OutputStream

抽象类,表示输出字节流的所有类的超类

  • void close()关闭输出流并释放与此流有关的所有系统资源
  • void flush()刷新此输出流并强制写出所有输出字节
  • void write(byte[] b)将b.length个字节从指定的byte数组写入此输出流
  • void write(byte[] b,int off,int len)将制定byte数组从偏移量off开始的len个字节写入此输出流

3. java.io.FlieOutputStream

  • FlieOutputStream(File file)创建Flie对象表示文件中写入数据的输出流(文件存在则覆盖)
  • FlieOutputStream(String name)创建指向指定名称文件中写入数据的输出流(文件存在则覆盖)
  • FileOutputStream(File file,boolean append)true在文件末尾继续添加,“\r\n”换行
  • FlieOutputStream(String name,boolean append)true就表示可以在文件末尾继续添加

4. java.io.ObjectOutputStream

操作对象的流

  • ObjectOutputStream(OutputStream out)传入OutputStream的实现类如FileOutputStream即可
  • void writeObject(Object obj)将指定对象写入ObjectOutputStream
  • ①被序列化的对象所属的类必须实现Serializable接口。否则会发生异常NotSerializableException异常。
  • ②反序列化对象时,如果对象所属的class文件在序列化之后被修改了,那么会发生异常InvalidClassException。
  • Serializable标记接口,给需要序列化的类,提供了一个序列版本号serialVersionUID. private static final long serialVersionUID = 1L;该版本号的目的在于验证序列化的对象和对应类是否版本匹配
  • ③transient修饰的属性不会琲序列化
  • ④静态修饰也不会被序列化,因为序列化是把对象数据进行持久化存储,而静态的属于类加载时的数据,不会被序列化

5. java.io.FilterOutputStream

  • FilterOutputStream(OutputStream out)传入OutputStream的实现类如FileOutputStream即可

6.java.io.BufferedInputStream

  • BufferedInputStream(InputStream in)字节缓冲输入流,提高了IO的读写速度

7. java.io.Writer 写入字符流的抽象类

  • void write(String str)写入字符串
  • void write(String str,int off,int len)写入字符串的某一部分
  • void write(char[] cbuf)写入字符数组
  • abstract void write(char[] cbuf,int off,int len)写入字符数组的某一部分
  • void write(int c)写入单个字符字节流转成字符流,将字符串按照指定的编码表转成字节

8. java.io.BufferedWriter 字符缓冲输出流,提高了IO读写速度

  • BufferedWriter(Writer out)使用默认大小输出缓冲区,传入Writer实现类如FileWriter
  • void newLine()根据当前的系统,写入一个换行符

9. java.io.PrintWriter

  • public PrintWriter(OutputStream out, boolean autoFlush)//开启文件自动刷新
  • PrintWriter(Writer out, boolean autoFlush)//开启文件自动刷新
  • void println(String str): 输出任意类型的数据,自动写入换行操作
  • void print(String str)输出任意类型的数据

10. java.io.OutputStreamWriter

  • OutputStreamWriter类字符流转成字节流,将字符串按照指定的编码表转成字节
  • OutputStreamWriter(OutputStream out Charset cs)创建使用给定字符集的编码对象

11. java.io.FileWriter

  • FileWriter假定默认字符编码GBK和默认字节缓冲区大小都是可接受的。
  • FileWriter(File file)根据File对象构造一个FileWriter对象(覆盖)
  • FileWriter(String FileName)根据文件名创建FileWriter对象
  • FileWriter(File file,boolean append)File对象构造FileWriter对象(true继续写)
  • FileWriter(String FileName,boolean append)文件名创建FileWriter对象(true继续写)

12. java.io.Reader 读取字符流的抽象超类

  • int read()读取单个字符并返回,若没有则返回-1
  • int read(char[] cbuf)将字符读入数组,并返回读取的个数

13. java.io.BufferedReader 字符缓冲输入流,提高了IO读写速度

  • BufferedReader(Reader in)默认大小输入缓冲区
  • String readLine()返回文本行内容字符串,不包含任何行终止符,到达流的末尾返回null

14. java.io.InputStreamReader 字节流通向字符流的桥梁:它使用指定的字符编码表读取字节并将其解码为字符

  • InputStreamReader(InputStream in Charset cs)创建使用给定字符集的解码对象

15. java.io.FileReader

  • 读取字符文件的便捷类,假定默认字符编码GBK和默认字节缓冲区大小都是适当的
  • FileReader(File file)从file对象创建一个新的FileReader
  • FileReader(String fileName)从读取数据的文件名创建一个新的FileReader

16. flush()和close()的区别?

  • flush():将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用。
  • close():关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后在关闭流。流不可以使用。如果写入数据多,一定要一边写一边刷新,
    最后一次可以不刷新,由close完成刷新并关闭

四、 文件复制

采用高效的流,一个多个字节的方式赋值
BufferedInputStream in = new BufferedInputStream(new FileInputStream(src));
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(dest));
byte[] buffer = new byte[1024];
int len = -1;
while ( (len = in.read(buffer)) != -1) {out.write(buffer, 0, len);
}
in.close();
out.close();
采用高效的流,一次一个字节的方式复制
BufferedInputStream in = new BufferedInputStream(new FileInputStream(src));
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(dest));
int ch = -1;
while ((ch=in.read()) != -1) {out.write(ch);	
}		
in.close();
out.close();
采用高效的流文件复制
BufferedReader in = new BufferedReader(new FileReader("file.txt"));
BufferedWriter out = new BufferedWriter(new FileWriter("copyFile.txt"));
String line = null;
while ( (line = in.readLine()) != null ) {out.write(line);out.newLine();
}
out.close();
in.close();

总结

本文介绍了java io的使用,如果有任何疑问欢迎私信或者评论

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

昇思25天学习打卡营第1天|快速入门-Mnist手写数字识别

学习目标:熟练掌握MindSpore使用方法 学习心得体会,记录时间 了解MindSpore总体架构 学会使用MindSpore 简单应用时间-手写数字识别 一、MindSpore总体架构 华为MindSpore为全场景深度学习框架,开发高效,全场景统一部署特点。 …

Verilog进行结构描述(三):Verilog模块实例化

目录 1.模块实例化(module instantiation)2.实例数组(Array of Instances) 微信公众号获取更多FPGA相关源码: 1.模块实例化(module instantiation) 模块实例化时实例必须有一个名字。使用位置映射时,端口次序与模块的说明相同。使用名称映射时&#x…

搭建大型分布式服务(四十)SpringBoot 整合多个kafka数据源-支持生产者

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、原项目四、修改项目五、测试一下五、小结 前言 本插件稳定运行上百个kafka项目&#xff0c;每天处理上亿级的数据的精简小插件&#xff0c;快速上手。 <dependency><groupId>io.github.vipjo…

【LeetCode】每日一题:无重复字符的最长子串

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串的长度。 解题思路 滑动窗口&#xff0c;水题&#xff0c;但是学到了python的内置函数find&#xff0c;可以查找字符串中字符出现的位置&#xff0c;没有的话返回-1&#xff0c;数组中可以使用index&…

ZYNQ学习教程?ZYNQ-FPGA实战教程!

学习 ZYNQ 比FPGA、MCU、ARM 等传统工具开发要求更高&#xff0c;想学好 ZYNQ 也不是一蹴而就的事情。 学习 ZYNQ 要具备的技能&#xff1a; 1、 软件开发人员  计算机组成原理、 C、C语言、 计算机操作系统、tcl 脚本、良好的英语基础 2、 逻辑开发人员 计算机组成原理…

实际开发中Java线程池怎么配

前言 在实际开发中&#xff0c;业务场景是多种多样的&#xff0c;分为IO密集型与CPU密集型俩种。针对不同的场景。如何配置一个合理的线程池是十分重要的&#xff5e;。 接下来我从Java线程池的生命周期以及实际开发场景讲解如何配置Java线程池 Java线程池 线程池七大参数 核…

关于服务器的一些知识

1. 云服务器 和 轻量应用服务器 腾讯云中的"云服务器"&#xff08;Cloud Virtual Machine, CVM&#xff09;和"轻量应用服务器"&#xff08;Lite Cloud Server&#xff09;都是提供云端计算资源的服务&#xff0c;但它们在定位、特性和使用场景上存在一些差…

【昇思大模型平台体验篇】day1快速入门

早闻毕晟、昇思等平台&#xff0c;今日有机会能参加入门课程&#xff0c;非视频课程算是我第一次看&#xff0c;也算是对我自己的一个锻炼&#xff0c;之前也没有系统学习模型之类&#xff0c;每天抽出一点点时间来学习一下也是不错的 MindSpore 看来是和torch类似的结构 处理…

GPT5将引领第四次工业革命:人工智能、物联网、大数据、生物技术、量子计算等的综合体GPT大模型将改变很多现在的工作方式和生活方式,人人必读,人人必用

2024年6月22日&#xff0c;美国达特茅斯工程学院的一场采访引起了全球科技界的广泛关注。OpenAI首席技术官米拉穆拉蒂在采访中确认&#xff0c;备受期待的GPT-5将在一年半后发布。 这一消息不仅激起了科技界的热烈讨论&#xff0c;也让人们对人工智能&#xff08;AI&#xff09…

LongRAG:利用长上下文大语言模型提升检索生成效果

一、前言 前面我们已经介绍了多种检索增强生成 (RAG) 技术&#xff0c;基本上在保证数据质量的前提下&#xff0c;检索增强生成&#xff08;RAG&#xff09;技术能够有效提高检索效率和质量&#xff0c;相对于大模型微调技术&#xff0c;其最大的短板还是在于有限的上下文窗口…

幽默证明题!高考成绩公布后,妈妈连夜写了一封信:孩子,这就是我不让你玩手机的原因——早读(逆天打工人爬取热门微信文章解读)

毛毛雨&#xff0c;五分钟结束&#xff0c;怎么证明今天早上有下雨呢&#xff1f; 引言Python 代码第一篇 洞见 高考成绩公布后&#xff0c;妈妈连夜写了一封信&#xff1a;孩子&#xff0c;这就是我不让你玩手机的原因第二篇 视频新闻结尾 引言 今天睡眠质量不错 发现一个问题…

10分钟微调专属于自己的大模型_10分钟微调大模型

1.环境安装 # 设置pip全局镜像 (加速下载) pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ # 安装ms-swift pip install ms-swift[llm] -U# 环境对齐 (通常不需要运行. 如果你运行错误, 可以跑下面的代码, 仓库使用最新环境测试) pip install -r r…

面试专区|【88道Vue高频题整理(附答案背诵版)】

1、请简述Vue插件和组件的区别 &#xff1f; Vue的插件&#xff08;Plugin&#xff09;和组件&#xff08;Component&#xff09;是Vue.js中非常重要的两个概念&#xff0c;它们在功能上有着明显的差异。 Vue组件&#xff08;Component&#xff09;&#xff1a; Vue组件是Vue…

vb6多线程异步,VB.NET 全用API实现:CreateThread创建多线程,等待线程完成任务

在VB.NET中&#xff0c;你可以使用API函数来创建多线程并等待线程完成任务。以下是一个示例代码&#xff0c;展示如何使用API函数来实现这个功能&#xff1a; Imports System.Runtime.InteropServices Imports System.ThreadingPublic Class Form1Private Delegate Sub ThreadC…

大模型+多模态合规分析平台,筑牢金融服务安全屏障

随着金融市场的快速发展&#xff0c;金融产品和服务日趋多样化&#xff0c;消费者面临的风险也逐渐增加。 为保护消费者权益&#xff0c;促进金融市场长期健康稳定发展&#xff0c;国家监管机构不断加强金融监管&#xff0c;出台了一系列法律法规和政策文件。对于金融从业机构…

【DC-DC升压电推剪方案】FP6277,FP6296电源升压芯片在电推剪中扮演着一个怎样的角色?带你深入了解电推剪的功能和应用及工作原理

随着人们对个人形象要求的不断提高&#xff0c;理发器作为一个必备的家居用品&#xff0c;也在不断进行技术升级。而其中的核心装备之一&#xff0c;电推剪理发器升压芯片FP6277、FP6296&#xff0c;正在引领着现代理发技术的突破。本文将给大家带来的是电推剪在传统意义上运用…

keil仿真,查看函数执行时间和执行次数

Execution Profiler执行档案器 The Execution Profiler records timing and execution statistics about instructions for the complete program code. To view the values in the Editor or Disassembly Window, use Show Time or Show Calls from the menu Debug — Executi…

[vue]打包后发布相关问题总结

问题1&#xff1a; 1. history模式下&#xff0c;发布到nginx后&#xff0c;刷新页面或者地址栏回车404问题。 打开nginx的nginx.conf文件&#xff0c;添加注释【2】对应行的代码&#xff0c;可以解决这个问题。 events {worker_connections 1024; }http {include mime.typ…

6.18-6.26 旧c语言

第一章 概述 32关键字 9种控制语句 优点&#xff1a;能直接访问物理地址&#xff0c;位操作&#xff0c;代码质量高&#xff0c;执行效率高 可移植性好 面向过程&#xff1a;以事件为中心 面向对象&#xff1a;以实物为中心 printf&#xff1a;系统定义的标准函数 #include&l…

Java并发编程中的线程局部变量ThreadLocal variables的关键点是什么?

ThreadLocal变量的关键点 ThreadLocal变量是Java中用于实现线程局部存储的一种机制&#xff0c;它允许每个线程拥有自己的变量副本&#xff0c;从而避免了多线程环境下变量共享导致的并发问题。以下是ThreadLocal变量的几个关键点&#xff1a; 线程隔离&#xff1a;ThreadLoc…