19.Java文件操作---I/O流

news/2024/3/29 3:26:42/文章来源:https://blog.csdn.net/weixin_44203782/article/details/130372890

Java文件操作—I/O流

流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL。实际上,流的源端和目的端可简单地看成是字节的生产者和消费者,对输入流,可不必关心它的源端是什么,只要简单地从流中读数据,而对输出流,也可不知道它的目的端,只是简单地往流中写数据。
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

Java中的I/O是一个庞大的体系,大致可以分为三个部分:

  • File类:Java中用于操作系统文件或文件夹的类
  • I/O类(方向):主要包含Input(从硬盘读取数据到程序)和Output(将程序内容写入到硬盘)
  • I/O类(数据类型):主要包含字节流(以字节[8 bit]为单位做数据的传输)和字符流以字符为单位[1字符 = 2字节]做数据的传输

在这里插入图片描述

一、File文件类

File类在java.io包下,用于表示文件或目录的信息(名称、大小等),不能用于文件内容的访问。

File类的常用方法

在这里插入图片描述

public static void main(String[] args) {File file=new File("/Users/aries/Desktop/1.rtf");System.out.println(file.isFile());//判断是否是一个文件System.out.println(file.exists());//判断文件是否存在System.out.println(file.getName());//获取文件名System.out.println(file.getPath());//获取文件路径System.out.println(file.getAbsolutePath());//获取文件路径System.out.println(file.length());//获取文件长度}

在这里插入图片描述
注意:File类实例化对象时必须指定文件路径,对于不同的操作系统,文件路径中的分隔符不同,例如Windows系统分隔符为反斜杠“\”,Linux系统则为正斜杠“/”。

二、常用流

  • 文件字节输入流:FileInputStream
    FileInputStream流被称为文件字节输入流,意思指对文件数据以字节的形式进行读取操作如读取图片视频等
public static void main(String[] args) {File file=new File("/Users/aries/Desktop/1.txt");FileInputStream fis=null;try {fis = new FileInputStream(file);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}int l=0;StringBuffer str=new StringBuffer();while(l!=-1) {try {l=fis.read();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}char c=(char)l;str.append(c);}System.out.println(str.toString());try {fis.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
  • 文件字节输出流:FileOutputStream FileOutputStream流是指文件字节输出流,专用于输出原始字节流如图像数据等
public static void main(String[] args) {File file=new File("/Users/aries/Desktop/1.txt");String content="Hello World";FileOutputStream fos=null;try {fos = new FileOutputStream(file, false);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {fos.write(content.getBytes());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {fos.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
  • 文件字符输入流:FileReader 程序以字符为单位从磁盘文件读取数据
public static void main(String[] args) {File file=new File("/Users/aries/Desktop/1.txt");FileReader fr=null;try {fr = new FileReader(file);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}int c = 0;try {while((c = fr.read()) != -1){System.out.print((char)c);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {fr.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
  • 文件字符输出流:FileWriter 程序以字符为单位,向磁盘文件写入数据
public static void main(String[] args) {File file=new File("/Users/aries/Desktop/1.txt");FileWriter fw = null;try {fw = new FileWriter(file,true);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}String str = "HelloWorld我的Java世界";try {fw.write(str);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {fw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
  • 缓冲字节输入流:BufferedInputStream 缓冲字节输入流对读取数据提供了缓冲的功能,提⾼了读取的效率
public static void main(String[] args) {File file=new File("/Users/aries/Desktop/1.txt");FileInputStream in=null;try {in = new FileInputStream(file);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}BufferedInputStream bis = new BufferedInputStream(in, 1024);int b=0;try {while((b = bis.read()) != -1){System.out.print((char)b);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {bis.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {in.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
  • 缓冲字节输出流:BufferedOutputStream 缓冲字节输出流对写入数据提供了缓冲的功能,提⾼了写入的效率
public static void main(String[] args) {File file=new File("/Users/aries/Desktop/1.txt");FileOutputStream out=null;try {out = new FileOutputStream(file,false);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}BufferedOutputStream bos = new BufferedOutputStream(out, 1024);try {bos.write("helloMyJava".getBytes());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {bos.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {out.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

缓冲字符输入流:BufferedReader
缓冲字符输入流对读取数据提供了缓冲的功能,提⾼了读取的效率

public static void main(String[] args) {File file=new File("/Users/aries/Desktop/1.txt");FileReader fr=null;try {fr = new FileReader(file);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}BufferedReader br = new BufferedReader(fr, 1024);String str;try {while((str = br.readLine()) != null){System.out.println(str);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {br.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {fr.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
  • 缓冲字符输出流:BufferedWriter 缓冲字符输出流对读取数据提供了缓冲的功能,提⾼了读取的效率
	public static void main(String[] args) {File file=new File("/Users/aries/Desktop/1.txt");FileWriter fw=null;try {fw = new FileWriter(file);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}BufferedWriter br = new BufferedWriter(fw);try {br.write("来呀,你打我撒");br.newLine();br.write("来呀,你打我撒");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {br.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {fw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
  • 字节流转换字符流:InputStreamReader
  • 字节流转换成字符流的桥梁,可以显式地指定字符集,否则调用默认字符集
  • 字符流转换字节流:OutputSreamWriter
  • 字符流转换成字节流的桥梁,可以显式地指定字符集,否则调用默认字符集
  • 字节数组输入流:ByteArrayInputStream
  • 包含一个内部缓冲区该缓冲区包含从流中读取的字节。内部计数器跟踪read方法要提供的下一个字节。关闭ByteArrayInputStream无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何IOException
  • 字节数组输出流:ByteArrayOutputStream
  • 实现了一个输出流,其中的数据被写入一个byte数组。缓冲区会随着数据的不断写入而自动增长。可使用toByteArray()和toString()获取数据。关闭ByteArrayOutputStream无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何IOException
  • 数据输入流:DataInputStream
  • 类允许应用程序以独立于机器的方式从输入流中读取原始数据
  • 数据输出流:DataOutputStream
  • 类允许应用程序以与机器无关的方式将原始Java数据类型写入输出流
  • 对象输入流:ObjectInputStream完成对象的序列化
  • 对象输出流:ObjectOutputStream完成对象的反序列化

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

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

相关文章

【问题记录】docker 搭建 minio

一、搭建过程 docker 搜索minio镜像 docker search miniodocker 拉取镜像 docker pull minio/miniodocker 启动 minio docker run -p 9900:9900 --name minio -d --restartalways -e MINIO_ACCESS_KEYminio -e MINIO_SECRET_KEY1qazWSX -v /usr/local/minio/data:/data -v …

PHP入门【1】环境搭建

目录 一,安装appserv组合包 二,运行第一个php程序 一,安装appserv组合包 组合包:将apache,mysql,php等服务器软件和工具安装配置完成后打包处理 组合包大大提高了我们的效率,不需要为配置环境…

MACH SYSTEMS操作手册 SAEJ2716(SENT) to RS-232/CAN Gateway怎么使用?

双通道SAE J2716 (SENT)至RS-232/CAN总线网关,具有两个双向SENT通道和RS-232 (SENT-RS232) 或CAN总线 (SENT-CAN) 接口。两种变体还提供两个模拟输出,可以直接将输入SENT数据转换为模拟电压。该网关配备了一个免费的PC应用程序,用于SENT通信分…

Linux Ansible创建任务并执行

目录 通过add-hoc执行anbise任务 通过Playbook剧本方式执行任务 Playbook包含的常用对象 Yaml语法 对Yaml格式自动对齐 Playbook语法检测与执行 Playbook任务实施 Playbook特权升级 Playbook常用模块 软件包管理模块 用户管理模块 存储模块管理 文件操作相关模块 …

gpt在线使用-免费的 GPT在哪下载

免费的 GPT(Generative Pre-trained Transformer) 。现在您可以免费体验我们的 GPT 技术,来让您的业务或项目更加智能。 GPT 是一种基于最前沿的自然语言处理技术,它展现出了令人惊叹的预测能力和交互性能。我们的 GPT 是在世界顶…

TryHackMe-M4tr1x: Exit Denied(boot2root)

M4tr1x: Exit Denied 大多数人只看到一个完美构建的系统。但你一直都是不同的。你不仅看到表面上的东西,还看到 它下面有什么统治;调节和调节的内部关联机制 几乎完美地管理其每个模块,以至于它试图隐藏所有模块 其多面设计中的微小孔。但是&#xff0c…

linux-01-基础回顾-虚拟机安装linux(centos7)、linux常用命令

文章目录 Linux-Day01课程内容1. 前言1.1 什么是Linux1.2 为什么要学Linux1.3 学完Linux能干什么 2. Linux简介2.1 主流操作系统2.2 Linux发展历史2.3 Linux系统版本 3. Linux安装3.1 安装方式介绍3.2 安装VMware3.3 安装Linux3.4 网卡设置3.5 安装SSH连接工具3.5.1 SSH连接工具…

Linux安装mysql(5.7解压版)

Linux服务器安装软件时,建议安装解压版,将文件安装在自己指定的目录。安装版一般会将软件安装在Linux默认的目录,如/usr/local/,配置文件在/etc/,日志在/logs,安装目录比较分散,特别是不熟悉该软…

Linux网络——PXE高效批量网络装机

Linux网络——PXE高效批量网络装机 一、PXE远程安装服务1.PXE批量部署的优点2.搭建PXE网络体系的安装条件 二、PXE 安装进行前的配置1.PXE装机所需的文件2.搭建 PXE 过程中使用的服务和程序①.DHCP服务②.vsftpd服务③.TFTP服务④.syslinux 三、搭建 PXE 远程安装服务器1.安装相…

IPEmotion 2023 R1支持在线能量分析

新发布的IPEmotion 2023 R1提供了许多新功能,其中最重要的是新的“在线功率计算(Online Power Calculation)”功能。该功能允许使用预定义的功率计算来进行测量任务和数据分析。此外,IPEmotion 2023 R1现在支持一种新的存储模式&a…

Vmware安装Ubuntu出现 unable to find a medium containing a live file system

一、前言 由于未知的原因,使用Vmware安装Ubuntu的时候,总是遇到奇怪的问题。(忘记截图了…) 大致是: unable to find a medium containing a live file system找了几个帖子,参考1、参考2,但都…

现场工程师救火-UEFI(BIOS)节能设置导致金牌服务器只跑出龟速

近期协助出现场,解决了一个非常典型的UEFI 启动参数配置不当导致的服务器降效案例。错误的节能参数配置,导致价值几十万的服务器变成龟速服务器,并造成严重的生产事故。 1. 现象 朋友公司近期准备升级2010年就部署的服务器组,新…

【LeetCode】188. 买卖股票的最佳时机 IV

188. 买卖股票的最佳时机 IV(困难) 思路 状态定义 一、首先确定要一天会有几种状态,不难想到有四种: a.当天买入了股票;b.当天卖出了股票;c.当天没有操作,但是之前是买入股票的状态&#xff…

【数据库】数据库的基础知识

目录 前言 1、 查看数据库 1.1、查看所有数据库(show databases;) 1.2、创建数据库之后,查看创建的数据库的基本信息。 2、 创建数据库 2.1、直接创建数据库(create database [数据库名];) 2.2、创建数据库的时…

Pytest接口自动化测试实战演练

结合单元测试框架pytest数据驱动模型allure 目录 api: 存储测试接口conftest.py :设置前置操作目前前置操作:1、获取token并传入headers,2、获取命令行参数给到环境变量,指定运行环境commmon:存储封装的公共方法connect_mysql.p…

解决方案:Zotero实现参考文献中英文混排,将英文文献中的“等”转成“et al.”

Zotero 是一款非常实用且易于使用的参考文献管理工具,可帮助用户收集、整理和引用各种类型的文献,包括图书、期刊文章、网页等。在学术写作中起着重要作用。 但是其在中文世界中,运行起来偶尔会出现问题,这里记录一个问题及其解决…

隋唐洛阳“西宫”:上阳宫的GIS视角

隋唐洛阳城简介 营建 隋大业元年(605年),在隋炀帝的授意下,隋代著名城市设计师宇文恺,在汉魏故城以西重新选址,历时8个月,日役劳工200万,兴建新都洛阳城。 城和苑 隋唐洛阳城采用…

eBPF技术介绍

前言 eBPF起源于linux内核,它可以以砂箱程序运行在操作系统内核的特权上下文,高效,安全,易于扩展而不需要修改内核源码或者加载内核模块。 操作系统一直是实现观测,安全和网络功能的最理想的地方,因为内核的…

优思学院|精益管理的理念是什么?

作为一个企业,我们都希望拥有高效率和优异的竞争力。但是,如何才能在竞争激烈的市场中脱颖而出?这时,精益管理理念的出现可以帮助我们。 精益管理的基本概念是什么? 精益管理的核心理念是通过消除浪费来实现生产效率…

Java线程间通信方式(3)

前文了解了线程通信方式中的CountDownLatch, Condition,ReentrantLock以及CyclicBarrier,接下来我们继续了解其他的线程间通信方式。 Phaser Phaser是JDK1.7中引入的一种功能上和CycliBarrier和CountDownLatch相似的同步工具,相…