温州网站建设小公司/十大外贸平台
1.流的概念
流是一种有序的数据序列,根据操作类型,可以分为输入流和输出流两种。I/O流(输入输出)提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。
1.1 输入流:
程序从指向源的输入流中读取源中的数据,源可以是文件、网络、压缩包、其他数据。
1.2 输出流:
输出流的指向是数据要到达的目的地,程序通过向输出流中写入数据吧信息传递到目的地。输出流的目标可以是文件、网络、压缩包、控制台、其他数据输出目标。
2.输入/输出流
Java中所有的输入/输出流分为【字节输入/输出流】和【字符输入/输出流】
2.1 字节输入流:InputStream类
InputStream类是字节输入流的抽象类,是所有字节输入流的父类,该类中所有方法遇到错误都会发生IOException异常。
2.1.1 read()方法:
从输入流中读取数据的下一个字节,返回0~255范围内的int字节值,如果到达流末尾而没有可用字节,则返回-1;
2.1.2 read(byte[] b)方法:
从输入流中读取一定长度的字节,并以整数的形式返回字节数;
2.1.3 mark(int readlimit)方法:
在输入流的当前位置放置一个标记,readlimit参数告知此输入流在标记位置失效之前允许读取的字节数;
2.1.4 reset()方法:
将输入指针返回到当前所做的标记处;
2.1.5 skip(long n)方法:
跳过输入流上的n各字节,并返回实际跳过的字节数;
2.1.6 markSupported()方法:
如果当前流支持mark()/reset()操作就返回true;
2.1.7 close()方法:
关闭此输入流,并释放与该流有关联的所有系统资源;
2.2 字节输入流:Reader类
2.3 字节输出流:OutputStream类
OutputStream类是字节输出流的抽象类,此抽象类是所有字节输出流类的父类(超类)。OutputStream类的所有方法都返回void,在遇到错误时都会引发IOException异常。
2.2.1 write(int b)方法:
将指定的字节写入此输出流;
2.2.2 write(byte[] b)方法:
将b个字节从指定的byte数组中写入到此输出流;
2.2.3 write(byte[] b, int off, int len)方法:
将指定的byte数组b中从偏移量off开始的len个字节写入此输出流;
2.2.4 flush()方法:
彻底完成输出并清空缓存区;
2.2.5 close()方法:
关闭输出流,并释放与该流有关联的所有系统资源;
2.4 字符输出流:Writer类
3.File类
File类是java.io包中唯一代表磁盘文件本身的对象。可以同File类中的方法来实现创建、删除、重命名文件等操作。File类的对象主要用来获取文件本身的一些信息,如文件所在的目录,文件的长度,文件的读写权限等。
3.1 文件的创建与删除
使用File类创建文件对象有3种方法:
3.1.1 File(String pathname)
此构造方法通过将指定的路径名字符串转换为抽象路径名,来创建一个新的File实例。
语法:
File file = new File(String pathname);
pathname为指定路径名称(包含文件名),如:File file = new File("/chuntian/word.txt")
3.1.2 File(String parent, String child)
此构造方法根据定义父路径和子路径字符串(含文件名)创建一个新的File对象。
语法:
File file = new File(String parent, String child);
parent:父路径字符串,如“D:/doc”;
child:子路径字符串,如“word.txt”
3.1.3 File(File f, String child)
语法:
File file = new File(File f, String child);
f:父路径对象,如“D:/doc/”;
child:子路径字符串,如“word.txt”;
通过File类创建一个文件对象后,如File file = new File("word.txt"),如果当前目录中不存在名为word.txt的文件,File类会通过调用createNewFile()方法创建一个名称为word.txt的文件;如果存在word.txt文件,可以通过调用文件对象的delete()方法删除这个文件。
package io;import java.io.File;
import java.io.IOException;public class FileTest {public static void main(String[] args) {File file = new File("./word.txt"); //创建文件对象fileif (file.exists()) {file.delete(); //如果文件存在就删除文件System.out.println("文件已删除~");} else {try {file.createNewFile(); //如果文件不存在,创建文件System.out.println("文件已创建!");} catch (IOException e) {e.printStackTrace();}}}
}输出:文件已创建!
3.2 获取文件信息
File类提供了很多方法来获取文件本身的信息,如:
方法 | 返回值 | 说明 |
getName() | String | 获取文件的名称 |
canRead() | boolean | 判断文件是否可读 |
canWrite() | boolean | 判断文件是否可写 |
exist() | boolean | 判断文件是否存在 |
length() | long | 获取文件的长度(以字节byte为单位) |
getAbsolutePath() | String | 获取文件的绝对经 |
getParent() | String | 获取文件的父路径 |
isFIle() | boolean | 判断文件是否为文件 |
isDirectory() | boolean | 判断文件是否为一个目录 |
isHidden() | boolean | 判断文件是否为隐藏文件 |
LastModified() | long | 获取文件最后修改时间 |
package io;import java.io.File;
import java.io.IOException;public class FileTest {public static void main(String[] args) {File file = new File("word.txt"); //创建文件对象fileif (file.exists()) {System.out.println("文件名称是:" + file.getName());System.out.println("文件长度是:" + file.length());System.out.println("该文件是隐藏文件吗?" + file.isHidden());System.out.println("文件的绝对路径是:" + file.getAbsolutePath());} else {System.out.println("该文件不存在");}}
}输出:文件名称是:word.txt文件长度是:8该文件是隐藏文件吗?false文件的绝对路径是:/Users/jeanet/IdeaProjects/MyProject/word.txt
4.文件输入/输出流
4.1 字节的输入/输出:FileInputStream类和FileOutputStream类
FileInputStream类是inputStream类的子类;
构造方法:
4.1.1 FileInputStream(String name)
使用给定的文件名创建一个FileInputStream对象;
4.1.2 FileOutputStream(File file)
使用File对象创建FileInputStream对象;
FileOutputStream类是outputStream类的子类。
FileOutputStream与FileInputStream的构造方法类似,创建FileOutputStream对象时可以指定一个不存在的文件名,但此文件不能是一个已被其他程序打开的文件。
package io;import java.io.*;public class FileTest {public static void main(String[] args) {File file = new File("word.txt"); //创建文件对象filetry {FileOutputStream fos = new FileOutputStream(file); //创建一个FileOutputStream对象String mystr = "希望在田野上,我爱春田~";byte[] mybyte = mystr.getBytes(); //创建byte型数组fos.write(mybyte); //将byte数组中的信息写入文件中fos.close(); //关闭流} catch (Exception e) {e.printStackTrace(); //输出异常信息}try {FileInputStream fis = new FileInputStream(file); //创建FileInputStream对象byte[] mybyte = new byte[1024]; //创建byte数组int len = fis.read(mybyte); //读取文件信息String fileinfo = new String(mybyte, 0, len);System.out.println("文件中的信息是:" + fileinfo);fis.close();} catch (Exception e) {e.printStackTrace();}}
}输出:文件中的信息是:希望在田野上,我爱春田~
4.2 字符的输入/输出:FileReader类和FileWriter类
4.2.1 FileReader
FileReader流顺序地读取文件,只要不关闭流,每次调用read()方法就能顺序地读取源文件中的字符内容,直到源的末尾或流被关闭。
4.2.2 FileWriter
package io;import java.io.*;public class FileTest {public static void main(String[] args) {File file = new File("word.txt"); //创建文件对象filetry {FileWriter fw = new FileWriter(file); //创建FileWriter字符对象fw.write("春天在哪里呀?");fw.close();} catch (Exception e) {e.printStackTrace(); //输出异常信息}try {FileReader fr = new FileReader(file); //创建FileReader对象char[] mychar = new char[1024]; //创建char型数组int len = fr.read(mychar); //将字节读入数组String mystr = new String(mychar, 0, len); //设置文本域的显示信息System.out.println("文件内容是:" + mystr);} catch (Exception e) {e.printStackTrace();}}
}输出:文件内容是:春天在哪里呀?
5.带缓存的输入/输出流
缓存是I/O的一种性能优化。缓存流为I/O流增加了内存缓存区,有了缓存区,在流上执行skip()、mark()、reset()方法就成为了可能。
5.1 字节的缓存输入/输出:BufferedInputStream类和BufferedOutputStream类
BufferedInputStream类和BufferedOutputStream类可以对所有的InputStream类和OutputStream类进行带缓存区的包装以达到性能优化;
构造方法:
5.1.1 BufferedInputStream(InputStream in)
创建了一个带32个字节的缓存流;
5.1.2 BufferedInputStream(InputStream in, int size)
按指定大小来创建缓存区。
5.1.3 BufferedOutputStream(OutputStream out)
创建了一个带32个字节的缓存流;
5.1.4 BufferedOutputStream(OutputStream out, int size)
按指定大小来创建缓存区。
flush()方法只对使用缓存区的OutputStream类的子类有效,用于在缓存区没满的情况下,也将缓存区的内容强制写入到外设,当调用close()方法时,系统在关闭流之前,也会将缓存区中的信息刷新到磁盘文件中。
5.2 字符的缓存输入/输出:BufferedReader类和BufferedWriter类
BufferedReader类继承了Reader类,BufferedWriter类继承了Writer类,这两个类同样具有缓存机制,可以以行为单位进行输入/输出。
5.2.1 BufferedReader类常用方法
5.2.1.1 read()方法:
读取单个字符;
5.2.1.2 readLine()方法:
读取一个文本行,并将其返回为字符串。若无数据可读,返回null;
5.2.2 BufferedWriter类常用方法
5.2.2.1 write(String s, int off, int len)方法:
写入字符串的某一部分;
5.2.2.2 flush()方法:
刷新该流的缓存;
5.2.2.3 newLine()方法:
写入一个行分隔符;
在使用BufferedWriter类的write()方法时,数据并没有立即写入输出流,而是首先进入缓存区中,如果想立刻将缓存区中的数据写入输出流,一定要调用flush()方法。
package io;import java.io.*;public class Student {public static void main(String[] args) {String[] content = {"好久不见", "最近好吗?", "常联系~"};File file = new File("word.txt");try {FileWriter fw = new FileWriter(file); //创建FileWriter对象BufferedWriter bw = new BufferedWriter(fw); //创建BufferedWriter对象for (int i = 0; i < content.length; i++) {bw.write(content[i]); //将字符串数组中的元素写入到磁盘文件bw.newLine();}bw.close();fw.close();} catch (Exception e) {e.printStackTrace();}try {FileReader fr = new FileReader(file); //创建FileReader对象BufferedReader br = new BufferedReader(fr); //创建BufferedReader对象int i = 0;String s = null;while ((s = br.readLine()) != null) {i++;System.out.println("第" + i + "行的内容是:" + s);}br.close();fr.close();} catch (Exception e) {e.printStackTrace();}}
}输出:第1行的内容是:好久不见第2行的内容是:最近好吗?第3行的内容是:常联系~
6.数据输入/输出流
6.1 DataInputStream
6.2 DataOutputStream
7.ZIP压缩输入/输出流
7.1 压缩文件:ZipOutputStream(OutputStream out)
7.2 解压缩文件:ZipInputStream(InputStream in)
相关文章:

Java I/O (输入/输出)
1.流的概念 流是一种有序的数据序列,根据操作类型,可以分为输入流和输出流两种。I/O流(输入输出)提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。 1.1 输入流: 程序从指向源的输入流中读…...

nodejs+vue食力派网上订餐系统-计算机毕业设计
采用当前流行的B/S模式以及3层架构的设计思想通过 技术来开发此系统的目的是建立一个配合网络环境的食力派网上订餐系统,这样可以有效地解决食力派网上订餐管理信息混乱的局面。 本设计旨在提高顾客就餐效率、优化餐厅管理、提高订单准确性和客户的满意度。本系统采…...

【计算机视觉】对极几何
文章目录 一、极线约束(Epipolar Constraint)二、相机标定过的情况三、相机没有标定过的情况四、八点算法(eight-point algorithm) 我的《计算机视觉》系列参考UC Berkeley的CS180课程,PPT可以在课程主页看到。 在上一…...

强大易于编辑的流程图组织图绘制工具draw.io Mac苹果中文版
draw.io可以绘制多种类型的图表,包括但不限于流程图、组织结构图、网络图、UML图、电气工程图等。draw.io提供了丰富的图形元素和编辑功能,使用户能够轻松地创建和编辑各种复杂的图表。同时,该软件还支持多种导出格式,方便用户在不…...

c# .net6 在线条码打印基于
条码打印基于:BarTender、ORM EF架构 UI展示: 主页代码: using NPOI.OpenXmlFormats.Spreadsheet; using ServerSide.Models; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawi…...

Hive SQL的编译过程
1.MapReduce实现基本SQL操作的原理 详细讲解SQL编译为MapReduce之前,我们先来看看MapReduce框架实现SQL基本操作的原理 1.1 Join的实现原理 select u.name, o.orderid from order o join user u on o.uid = u.uid; 在map的输出value中为不同表的数据打上tag标记,在reduce阶段…...

[架构之路-245/创业之路-76]:目标系统 - 纵向分层 - 企业信息化的呈现形态:常见企业信息化软件系统 - 企业资源管理计划ERP
目录 前言: 一、企业信息化的结果:常见企业信息化软件 1.1 企业资源管理计划 1.1.1 什么是ERP:企业最常用的信息管理系统 1.1.2 ERP的演进过程 1.1.3 EPR模块 1.1.4 EPR五个层级 1.1.5 企业EPR业务总体流程图 1.1.6 什么类型的企业需…...

数据库简史:多主数据库架构的由来和华为参天引擎的机遇
注:本文发表后,收到了很多后台反馈,其中关于大型机的早期成就不容省略。微调重发本文,纯属个人观点,错谬之处,仍然期待指正。 2023年10月13日,在北京举办的“2023金融业数据库技术大会"上&…...

C语言每日一练(二)
单链表经典算法专题 一、 单链表相关经典算法OJ题1:移除链表元素 解法一:在原链表中删除Node.nextnext的节点 typedef struct ListNode ListNode; struct ListNode* removeElements( ListNode* head, int val) {ListNode* pcur head;ListNode* pre h…...

HashJoin 在 Apache Arrow 和PostgreSQL 中的实现
文章目录 背景PostgreSQL HashJoin实现PG 执行器架构HashJoin 基本流程HashJoin 实现细节Join 类型HashJoin 的划分阶段HashJoin 的分批处理阶段JOIN 类型的状态机转换HashJoin 的投影和过滤 Arrow Acero HashJoin实现Acero 基本框架HashJoin 基本流程 总结 背景 近两个月转到…...

FL Studio21.2.0.3421最新汉化破解版中文解锁下载完整版本
音乐在人们心中的地位日益增高,近几年音乐选秀的节目更是层出不穷,喜爱音乐,创作音乐的朋友们也是越来越多,音乐的类型有很多,好比古典,流行,摇滚等等。对新手友好程度基本上在首位,…...

docker在java项目中打成tar包
docker在java项目中打成tar包 1、首先安装一个docker desktop 2、mvn install项目后,建立一个自己的dockerfile 这里我以我的代码举例,from 镜像,这里你也能打包好一个镜像的基础上,from打好的镜像,这里我们用openj…...

No175.精选前端面试题,享受每天的挑战和学习
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…...

【网安AIGC专题10.19】论文6:Java漏洞自动修复+数据集 VJBench+大语言模型、APR技术+代码转换方法+LLM和DL-APR模型的挑战与机会
How Effective Are Neural Networks for Fixing Security Vulnerabilities 写在最前面摘要贡献发现 介绍背景:漏洞修复需求和Java漏洞修复方向动机方法贡献 数据集先前的数据集和Java漏洞Benchmark数据集扩展要求数据处理工作最终数据集 VJBenchVJBench 与 Vul4J 的…...

解决国外镜像无法访问导致的R包无法安装问题
我自己的方法: install.packages("vcd", repos "https://mirrors.tuna.tsinghua.edu.cn/CRAN/") R包安装镜像设置的三种方法:R包安装镜像设置的三种方法 - 简书 更新了Rstudio后,出现 unable to access index for rep…...

【2021集创赛】Robei杯一等奖:基于Robei EDA工具的隔离病房看护机器人设计
本作品参与极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动。 团队介绍 参赛单位:重庆交通大学 队伍名称:一丘之貉 指导老师:毕波 李艾星 参赛队员:郁航 张坤 秦衡 总决赛奖项:Robei杯一等奖…...

Python之函数-传实参的两种方式
Python之函数-传实参的两种方式 函数参数 函数在定义是要定义好形式参数,调用时也提供足够的实际参数,一般来说,形参和实参个数要一致(可变参数除外)。实参传参方式 1、位置传参 定义时def f(x, y, z), 调用使用 f(1, 3, 5)&am…...

Hive客户端和Beeline命令行的基本使用
本专栏案例数据集链接: https://download.csdn.net/download/shangjg03/88478038 1.Hive CLI 1.1 命令帮助Help 使用 `hive -H` 或者 `hive --help` 命令可以查看所有命令的帮助,显示如下: usage: hive-d,--define <key=value> Variable subsitution to ap…...

Ubuntu 22.04自动登录进入桌面
1.编辑gdm3配置文件 sudo vim /etc/gdm3/custom.conf 2.修改内容为 AutomaticLoginEnableTrue AutomaticLoginusername 3.查看和重启服务 # 查看服务状态 systemctl --user status gnome-remote-desktop.service # 重启服务 systemctl --user restart gnome-remote-deskt…...

C#__简单了解XML文档
/* XML(可扩展标记语言):用于传输和存储数据 XML文档:树结构;包含根元素 XML元素:从开始标签到结束标签的部分 XML语法规则: 1、所有XML元素都必须有结束标签 …...

云游数智农业世界,体验北斗时空智能
今日,2023年中国国际农业机械展览会在武汉正式拉开帷幕,众多与会者云集,各类农机产品纷呈,盛况空前。 千寻位置作为国家北斗地基增强系统的建设与运营方,在中国国际农业机械展览会上亮相,以「北斗时空智能 …...

C# 递归算法使用简介_常用整理
一、递归简介 递归算法是一种直接或者间接调用自身函数或者方法的算法。 递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。 递归本质是循环&a…...

[Python]unittest-单元测试
目录 unittest的大致构成: Test Fixture Test Case-测试用例 Test Suite-测试套件 Test Runner 批量执行脚本 makeSuite() TestLoader discover() 用例的执行顺序 忽略用例执行 skip skipIf skipUnless 断言 HTML测试报告 错误截图 unittest是python中的单元测…...

Jetpack:021-Jetpack中的滑动列表
文章目录 1. 概念介绍2. 使用方法2.1 函数参数2.2 列表成员 3. 示例代码4. 内容扩展5. 内容总结 我们在上一章回中介绍了Jetpack中底部导航栏相关的内容,本章回中主要介绍 滑动列表。闲话休提,让我们一起Talk Android Jetpack吧! 1. 概念介绍…...

基于单片机的空气质量检测系统
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、主要内容二、系统方案设计2.1 系统方案设计2.2 主控制器模块选择 三、 系统软件设计4.1 程序结构分析4.2系统程序…...

论文阅读——InstructGPT
论文:Training_language_models_to_follow_instructions_with_human_feedback.pdf (openai.com) github:GitHub - openai/following-instructions-human-feedback 将语言模型做得更大并不能从本质上使它们更好地遵循用户的意图。例如,大型语…...

【表面缺陷检测】铝型材表面缺陷检测数据集介绍(含xml标签文件)
一、铝型材介绍 铝型材是一种由铝合金材料制成的,具有固定截面形状和尺寸的条形建材。由于其优良的物理性能和广泛的应用领域,铝型材在现代工业和生活中发挥着重要的作用。 1、铝型材的分类 根据截面形状的不同,铝型材可分为角铝、槽铝、工…...

我的学习:从本科到研究生的认识与实践经验总结
学习实践经历 18年 上大学以后,因为对计算机的喜爱和对未知编程技术的好奇和探索,选择了从零开始学习程序设计,经过实践,选择了转专业到计算机科学与技术,开始了我的计算机学习之路。 19年 因为想要拓宽自己的专业能力…...

云游长江大桥,3DCAT实时云渲染助力打造沉浸化数字文旅平台
南京长江大桥是中国第一座自主设计建造的双层公路铁路桥,也是世界上最早的双层公路铁路桥之一。它不仅是一座桥梁,更是一座历史文化的见证者和传承者。它见证了中国人民的智慧和奋斗,承载了中国社会的变迁和发展。 如何让这座不可移动的文物…...

【音视频|PCM】PCM格式详解
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...