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

一文读懂Java/O流的使用方法和技巧

1.前言

Java 中的 I/O 流是实现输入和输出的一种机制,可以用来读写文件、网络、内存等各种资源。Java 提供了各种类型的流,包括字节流和字符流,以及面向文本和二进制数据的流。在本文中,我们将深入探讨 Java I/O 流的各个方面,从流的类型和分类开始,一步步讲解 Java I/O 流的使用方法和技巧。

2.流的类型和分类

Java 中的流可以分为两种类型:字节流和字符流。字节流以字节为单位读写数据,而字符流以字符为单位读写数据。在 Java 中,所有的流都是从 InputStream 或 Reader 类派生出来的。InputStream 和 Reader 类都是抽象类,提供了一些抽象方法和常量,用于实现不同类型的流。

2.1 字节流

字节流用于读写二进制数据。Java 中的字节流包括两个基本的抽象类:InputStream 和 OutputStream。InputStream 类表示输入流,用于从输入设备读取数据,而 OutputStream 类表示输出流,用于向输出设备写入数据。下面是一些常用的字节流类:

  • FileInputStream:用于读取文件中的数据。
  • FileOutputStream:用于向文件中写入数据。
  • ByteArrayInputStream:用于从内存中的缓冲区读取数据。
  • ByteArrayOutputStream:用于向内存中的缓冲区写入数据。
  • BufferedInputStream:用于提高读取文件的效率。
  • BufferedOutputStream:用于提高写入文件的效率。

2.2 字符流

字符流用于读写文本数据。Java 中的字符流包括两个基本的抽象类:Reader 和 Writer。Reader 类表示输入流,用于从输入设备读取文本数据,而 Writer 类表示输出流,用于向输出设备写入文本数据。下面是一些常用的字符流类:

  • FileReader:用于读取文件中的文本数据。
  • FileWriter:用于向文件中写入文本数据。
  • CharArrayReader:用于从内存中的字符数组中读取数据。
  • CharArrayWriter:用于向内存中的字符数组中写入数据。
  • BufferedReader:用于提高读取文本文件的效率。
  • BufferedWriter:用于提高写入文本文件的效率。

3.流的使用方法

3.1 字节流的使用方法

使用字节流读取文件中的数据:

FileInputStream inputStream = new FileInputStream("example.txt");
int data;
while ((data = inputStream.read()) != -1) {System.out.print((char) data);
}
inputStream.close();

使用字节流写入数据到文件中:

FileOutputStream outputStream = new FileOutputStream("example.txt");
String data = "Hello, world!";
outputStream.write(data.getBytes());
outputStream.close();

使用缓冲字节流提高读取和写入的效率:

BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("example.txt"));
int data;
while ((data = bufferedInputStream.read())!= -1) {
System.out.print((char) data);
}
bufferedInputStream.close();BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream("example.txt"));
String data = "Hello, world!";
bufferedOutputStream.write(data.getBytes());
bufferedOutputStream.flush();
bufferedOutputStream.close();

3.2 字符流的使用方法 使用字符流读取文件中的数据:

FileReader reader = new FileReader("example.txt");
int data;
while ((data = reader.read()) != -1) {System.out.print((char) data);
}
reader.close();

使用字符流写入数据到文件中:

javaCopy codeFileWriter writer = new FileWriter("example.txt");
String data = "Hello, world!";
writer.write(data);
writer.close();

使用缓冲字符流提高读取和写入的效率:

BufferedReader bufferedReader = new BufferedReader(new FileReader("example.txt"));
String line;
while ((line = bufferedReader.readLine()) != null) {System.out.println(line);
}
bufferedReader.close();BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("example.txt"));
String data = "Hello, world!";
bufferedWriter.write(data);
bufferedWriter.newLine();
bufferedWriter.flush();
bufferedWriter.close();

4.I/O 流的常见问题和解决方法

4.1 字符编码问题

在 Java 中,字符流和字节流的读写操作都需要注意字符编码问题。如果文件的字符编码和 Java 虚拟机默认的字符编码不一致,就会导致读取或写入的数据出现乱码。

解决方法:可以使用 InputStreamReader 和 OutputStreamWriter 类来指定字符编码。例如,下面是一个读取 UTF-8 编码文件的示例:

javaCopy codeReader reader = new InputStreamReader(new FileInputStream("example.txt"), "UTF-8");

4.2 文件读取问题

在 Java 中,读取文件时需要注意文件不存在、文件无法访问等问题。如果不进行异常处理,就会导致程序崩溃。

解决方法:可以使用 try-catch 语句来捕获异常并处理异常。例如,下面是一个读取文件的示例:

try {FileInputStream inputStream = new FileInputStream("example.txt");// 读取文件内容
} catch (FileNotFoundException e) {e.printStackTrace();
}

4.3 文件写入问题

在 Java 中,写入文件时需要注意磁盘空间不足、文件无法访问等问题。如果不进行异常处理,就会导致程序崩溃。

解决方法:可以使用 try-catch 语句来捕获异常并处理异常。例如,下面是一个写入文件的示例:

try {FileOutputStream outputStream = new FileOutputStream("example.txt");// 写入文件内容
} catch (FileNotFoundException e) {e.printStackTrace();
}

总结

本文对 Java I/O 流进行了详细的介绍,包括流的类型和分类、流的使用方法以及常见问题和解决方法。掌握 Java I/O 流的使用方法和技巧,可以帮助我们更好地处理文件读写、网络通信等任务,提高程序的效率和可靠性。

 

相关文章:

一文读懂Java/O流的使用方法和技巧

1.前言 Java 中的 I/O 流是实现输入和输出的一种机制,可以用来读写文件、网络、内存等各种资源。Java 提供了各种类型的流,包括字节流和字符流,以及面向文本和二进制数据的流。在本文中,我们将深入探讨 Java I/O 流的各个方面&am…...

AI for Science系列(二):国内首个基于AI框架的CFD工具组件!赛桨v1.0 Beta API介绍以及典型案例分享!

AI for Science被广泛认为是下一代科研范式,可以有效处理多维度、多模态、多场景下的模拟和真实数据,解决复杂推演计算问题,加速新科学问题发现[1] 。百度飞桨科学计算工具组件赛桨PaddleScience是国内首个公开且可应用于CFD(Comp…...

SpringCloud简单介绍

文章目录1. 开源组件2. CAP原则1. 开源组件 功能springcloud netflixspringcloud alibabaspringcloud官方其他服务注册与发现eurekanacosconsulzookeeper负载均衡ribbondubbo服务调用openFeigndubbo服务容错hystrixsentinel服务网关zuulgateway服务配置的同一管理cofig-server…...

《uniapp基础知识》学习笔记Day38-(Period2)全局文件一些常用的配置

如果进行开发的话,首先要配置路由页面 page.json 页面路由 pages.json 文件用来对 uni-app 进行全局配置,决定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar 等。 {"pages": [{"path": "pages/component/index…...

APICloud 弹动与滚轴冲突的解决模拟

当打开页面的bounces开关来实现下拉刷新和上翻加载是,如果页面中有scroll-view,那么手指上下滑动时弹动会触发,而滚轴无法正常实现,只有按住不动再拖动滚轴才会触发。开始想通过获取手指点击屏幕的坐标点设置触发条件来解决两者的…...

Spring Cloud(微服务)学习篇(四)

Spring Cloud(微服务)学习篇(四) 1.nacos实现服务之间传参数 1.1 在dto包(shop-sms-api项目)中创建SmsDTO类 package com.zlz.shop.sms.api.dto;import lombok.Data;Data public class SmsDTO {private String tel; }1.2 复制SmsDTO类到shop-sms-server项目的dto包下面 1.3 …...

【Java Pro】001-Java基础:面向对象

【Java Pro】001-Java基础:面向对象 文章目录【Java Pro】001-Java基础:面向对象一、面向对象1、什么是对象现实生活中的对象与程序中的对象2、什么是面向对象面向过程面向对象3、面向过程与面向对象的比较思想方面设计方式方面实现方式方面4、面向过程与…...

ElasticSearch从0到1——基础知识

1.ES是什么? 是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能&…...

【面试系列】equals和==的区别

问题:两个对象值相同(x.equals(y) true),但是可能存在hashCode不同吗? 的定义 比较的是两个对象的内存地址,相等则意味着内存地址一样。 对象的equals方法 Object#equals public boolean equals(Object obj) {return (this obj);}Stri…...

存在重复元素模块-三道题

文章目录存在重复元素217. 存在重复元素219. 存在重复元素 II220. 存在重复元素 III (SortedList二分)小结存在重复元素 217. 存在重复元素 题目链接:217. 存在重复元素 题目大意:给你一个整数数组 nums 。如果任一值在数组中出…...

3种方法删除7-Zip压缩包的密码

7-Zip压缩软件是一款完全免费且开源的软件,不仅能压缩和解压7-Zip压缩包,还能给压缩包设置打开密码。 有些小伙伴可能会遇到这样的问题,7-Zip压缩包设置密码后,过了一段时间不需要密码保护了,或者一不小心忘记了密码&…...

Codeforces Round 855 (Div. 3)(A~F)

A. Is It a Cat?定义满足条件的字符串为:其中仅可能含有meow四种字母的大小写,而且相同种类的字母必须挨在一起,四种字母的顺序必须按照meow排列。给出一个字母串,求是否满足条件。思路:感觉是个很麻烦的模拟。首先把…...

【SpringCloud】SpringCloud详解之Feign实战

目录前言SpringCloud Feign远程服务调用一.需求二.两个服务的yml配置和访问路径三.使用RestTemplate远程调用(order服务内编写)四.使用Feign远程调用(order服务内配置)五.自定义Feign配置(order服务内配置)六.Feign配置日志(oder服务内配置)七.Feign调优(order服务内配置)八.抽…...

tuts4you上lena‘s40个crackme(1)

本来是不打算写文章了,因为懒,想以后通过录屏的形式保存一下自己学的路程。但奈何开学后一直没找到机会,在宿舍也不愿意大吼大叫的讲东西,只好再写写文章了 最近学了一些汇编语言和逆向工程,所以就想通过这40给题目来看…...

研讨会回顾 | Perforce版本控制工具Helix Core入华十年,携手龙智赋能企业大规模研发

2023年2月28日,龙智联合全球领先的数字资产管理工具厂商Perforce共同举办Perforce on Tour网络研讨会,主题为“赋能‘大’研发,助力‘快’交付”。 作为Perforce Helix Core产品在中国地区的唯一授权合作伙伴,龙智董事长何明女士为…...

C++ vscode 开发环境搭建

C vscode 开发环境搭建 笔记内容: C vscode 开发环境搭建准备了解g命令编译调试掌握使用launch.json和tasks.json配置文件编译调试了解使用cmake构建 git: https://github.com/weichangk/hellocpp/tree/master/vscodecmakecpp 环境搭建准备 安装vscode安装qt&a…...

ANR系列(二)——ANR监听方案之SyncBarrier

前言 在项目中经常遇到了手机假死问题,无规律的偶现问题,大量频繁随机操作后,便会出现假死,整个应用无法操作,不会响应事件,会发生各种奇怪的ANR,且trace不固定。而SyncBarrier是其中的罪魁祸首…...

【完美解决】应用程序无法正常启动(0xc000007b)请单击“确定”关闭应用程序

年期安装CorelDRAW X8 (64-Bit),安装完成之后运行一点毛病都没有,可是过了两三个月,再打开就出现“应用程序无法正常启动(0xc000007b)请单击“确定”关闭应用程序”这个提示框,如下图示 出现这个问题我就上网查找,无非…...

.NET基础加强第二课--静态成员,静态类

类 实例类 默认是实例类 静态类 在类前加上static ,就是静态类 静态类中,所有包含的成员必须是静态成员 实例成员是属于具体某个对象的 举例代码 Person p1 new Person(); p1.Age 20; p1.Name “张三”; class Person { public string Name { get; set;…...

【UML+OOPC嵌入式C语言开发】使用C语言实现一个面向对象语言才能够实现的类

文章目录简述OOPC开发环境知识讲解函数示例类的实现示例接口实现示例(前面两部分有点无聊,如果大家没兴趣看可以直接从知识讲解开始看) 简述OOPC oopc,是一种轻量级的面向对象的C语言编程框架, LW_OOPC是Light-Weight …...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...