第十五章:输入输出流I/O

15.1:输入/输出流
文件类:File
字节流:InputStream:入 OutputStream:出
字符流:Reader:入 Writer:出
15.1.1 输入流
InputStream类是字节输入流的抽象类,所有字节流的父类。该类中所有方法遇到错误会引发IOException异常。
该类中有一些方法
read()
read(byte[] b)
mark(int readlimit)
reset()
skip()
15.1.2 输出流
15.2 File类
操作:创建或者删除
状态:文件是否存在或者隐藏
创建文件对象
new File(String Pathnname)
File file = new File(“d:/1.txt”)
new File(String parent,String child)
new File(File parent,String child)
15.2.1:文件的创建与删除
package fifteenth;
import java.io.File;
public class FileTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("D:\\word.text");//创建文件对象
if(file.exists()) {//exists:存在
file.delete();//如果该文件存在
System.out.println("文件已删除");//将该文件删除
}else {//如果文件不存在
try {
file.createNewFile();//try语句捕捉可能出现的异常
System.out.println("文件已创建");//创建该文件
}catch(Exception e){
e.printStackTrace();
}
}
}
}
//例题15.1




15.2.2:获取文件信息
package fifteenth;
import java.io.File;
public class FileTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("D:\\word.text");//创建文件对象,两个斜杠是转义字符
if(file.exists()) {//exists:存在
String name = file.getName();//获取文件名称
long length = file.length();//获取文件长度
boolean hidden = file.isHidden();//判断文件是否隐藏
file.delete();//如果该文件存在
System.out.println("文件已删除");//将该文件删除
System.out.println("文件名称:"+name);
System.out.println("文件长度是:"+length);
System.out.println("该文件是隐藏文件吗?"+hidden);
}else {//如果文件不存在
try {
file.createNewFile();//try语句捕捉可能出现的异常:各种问题,处理或者抛出
System.out.println("文件已创建");//创建该文件
}catch(Exception e){
e.printStackTrace();
}
System.out.println("该文件不存在");
}
}
}
//例题15.2

递归算法
package fifteenth;
import java.io.File;
public class File1 {
public static void main(String[] args) {
File file = new File("D:\\xinli");
printAllFiles(file);
}
//在方法里再次调用方法,递归算法
private static void printAllFiles(File file) {
// TODO Auto-generated method stub
File[] files = file.listFiles();
for( File f: files) {
if(f.isDirectory()){
printAllFiles(f);
}else {
System.out.println(f.getName());
}
}
}
}

文件夹加持代码效果


15.3:文件输入/输出流
15.3.1:FileInputStream与FileOutputStream(字节流)
package fifteenth;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class FileSteamDemo { // 创建类
public static void main(String[] args) { // 主方法
File file = new File("D:\\word.txt"); // 创建文件对象
try { // 捕捉异常
FileOutputStream out = new FileOutputStream(file); // 创建FileOutputStream对象
byte buy[] = "我有一只小毛驴,我从来也不骑。".getBytes(); // 创建byte型数组
out.write(buy); // 将数组中的信息写入到文件中
out.close(); // 将流关闭
} catch (Exception e) { // catch语句处理异常信息
e.printStackTrace(); // 输出异常信息
}
try {
// 创建FileInputStream类对象
FileInputStream in = new FileInputStream(file);
byte byt[] = new byte[1024]; // 创建byte数组
int len = in.read(byt); // 从文件中读取信息
System.out.println("文件中的信息是:" + new String(byt, 0, len));// 将文件中的信息输出
in.close(); // 关闭流
} catch (Exception e) {
e.printStackTrace();
}
}
}
//例题15.3

package fifteenth;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileReaderDemo {
public static void main(String[] args) {
File file = new File("D:\\word.txt"); // 创建文件对象
try {
FileWriter fw = new FileWriter(file); // 创建字符输出流
String word = "明月几时有,把酒问青天。"; // 写入的字符串
fw.write(word); // 将字符串写入到文件中
fw.close(); // 关闭流
} catch (IOException e) {
e.printStackTrace();
}
try {
FileReader fr = new FileReader(file);// 创建字符输入流
char ch[] = new char[1024]; // 缓存字符数组
int len = fr.read(ch); // 将文件中的字符读入到缓存数组中
System.out.println("文件中的信息是:" + new String(ch, 0, len));// 将字符转为字符串输出
fr.close(); // 关闭流
} catch (IOException e) {
e.printStackTrace();
}
}
}//例题15.4

FileOutputStream
package fifteenth;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;//导入需要的类
public class FileStreamDemo {
//写入文件内容,读出来内容
public static void main(String[] args) throws IOException {
File file = new File("D:\\word.txt");//获取文件
FileOutputStream out = new FileOutputStream(file);//对于程序来说是输出
byte[] by = "hello world".getBytes();//创建byte类型的字节类型数组,输入想要的文字或字符
out.write(by);//调用方法,输入
out.close();//关闭输出流,不然会一直占用空间
// TODO Auto-generated method stub
}
}
此代码在控制台不会显示

在文件内显示
FileInputStream
package fifteenth;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;//导入需要的类
public class FileStreamDemo {
//写入文件内容,读出来内容
public static void main(String[] args) throws IOException {
File file = new File("D:\\word.txt");//获取文件
//字节流输出,在文件内显示
FileOutputStream out = new FileOutputStream(file);//对于程序来说是输出
byte[] by = "hello world".getBytes();//创建byte类型的字节类型数组,输入想要的文字或字符
out.write(by);//调用方法,输入
out.close();//关闭输出流,不然会一直占用空间
//字节流输入,在控制台显示
FileInputStream in = new FileInputStream(file);
byte[] by1 = new byte[1024];//1024字节太长,解决方法是指定长度读取并打印
int len = in.read(by1);
System.out.print(new String(by1,0,len));//0和len指代从0号位置开始读取到len位置结束
in.close();//关闭
}
}

15.3.2:FileReader和FileWriter
FileReader
package fifteenth;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileReaderDemo {
public static void main(String[] args) throws Exception {
// FileWriter输出 和 输入
File file = new File("D:\\word.txt");//获取文件
//字符流输出,在文件内显示
FileWriter writer = new FileWriter(file);//对于程序来说是输出
char[] ch = new char [] {'z','h'};//创建char类型的字节类型数组,输入想要的文字或字符
writer.write(ch);//调用方法,输入
writer.close();//关闭输出流,不然会一直占用空间
//字符流输入,在控制台显示
FileReader reader = new FileReader(file);
char[] ch1 = new char[1024];//1024字节太长,解决方法是指定长度读取并打印
int len = reader.read(ch1);//读出
System.out.print(new String(ch1,0,len));//0和len指代从0号位置开始读取到len位置结束
reader.close();//关闭
}
}

FileWriter
package fifteenth;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileReaderDemo {
public static void main(String[] args) throws Exception {
// FileWriter输出 和 输入
File file = new File("D:\\word.txt");//获取文件
//字符流输出,在文件内显示
FileWriter writer = new FileWriter(file);//对于程序来说是输出
char[] ch = new char [] {'z','h'};//创建char类型的字节类型数组,输入想要的文字或字符
writer.write(ch);//调用方法,输入
writer.close();//关闭输出流,不然会一直占用空间
//字符流输入,在控制台显示
FileReader reader = new FileReader(file);
char[] ch1 = new char[1024];//1024字节太长,解决方法是指定长度读取并打印
int len = reader.read(ch1);//读出
System.out.print(new String(ch1,0,len));//0和len指代从0号位置开始读取到len位置结束
reader.close();//关闭
}
}

15.4:带缓存的输入/输出流
普通流转换为带缓存的流
15.4.1 BufferedInputStream和BufferedOutStream
15.4.2:BufferedWriter和BufferedReader
package fifteenth;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedDemo {
public static void main(String args[]) {
String content[] = { "好久不见", "最近好吗", "常联系" };// 写入的内容
File file = new File("D:\\word.txt"); // 创建文件对象
try {
FileWriter fw = new FileWriter(file); // 文件字符输出流
BufferedWriter bw = new BufferedWriter(fw); // 换成输出流
for (int k = 0; k < content.length; k++) { // 遍历要输入的内容
bw.write(content[k]); // 写入字符串
bw.newLine(); // 写入一个换行符
}
bw.close(); // 关闭缓冲输出流
fw.close(); // 关闭文件字符输出流
} catch (IOException e) {
e.printStackTrace();
}
try {
FileReader fr = new FileReader(file); // 文件字符输入流
BufferedReader br = new BufferedReader(fr);// 缓冲输入流
String tmp = null; // 作为缓冲的临时字符串
int i = 1; // 行数
// 从文件中读出一行,如果读出的内容不为null,则进入循环
while ((tmp = br.readLine()) != null) {
System.out.println("第" + i + "行:" + tmp); // 输出读取的内容
i++; // 行数递增
}
br.close(); // 关闭缓冲输入流
fr.close(); // 关闭文件字符输入流
} catch (IOException e) {
e.printStackTrace();
}
}
}//例题15.5

//普通流
FileWriter writer = new FileWriter(file);
writer.write("门前大桥下,游过一群鸭");//调用方法,输入
writer.write("快来快来数一数,二四六七八");
writer.write("咕嘎咕嘎,真呀真多呀");
writer.write("数不清到底多少鸭");
//带缓存的流
BufferedWriter bw = new BufferedWriter(writer);
bw.write("门前大桥下,游过一群鸭");//调用方法,输入
bw.newLine();
bw.write("快来快来数一数,二四六七八");
bw.newLine();
bw.write("咕嘎咕嘎,真呀真多呀");
bw.newLine();
bw.write("数不清到底多少鸭");
bw.close();
缓存代码输出
package fifteenth;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileReaderDemo {
public static void main(String[] args) throws Exception {
// FileWriter输出 和 输入
File file = new File("D:\\word.txt");//获取文件
//缓存输出,在文件内显示
FileWriter writer = new FileWriter(file);//对于程序来说是输出
//缓存写入,将普通流转换为待缓存的流,进行换行操作
BufferedWriter bw = new BufferedWriter(writer);//传入普通流
//char[] ch = new char [] {'z','h'};创建char类型的字节类型数组,输入想要的文字或字符
//可以传入字符串
bw.write("门前大桥下,游过一群鸭");//调用方法,输入
bw.newLine();
bw.write("快来快来数一数,二四六七八");
bw.newLine();
bw.write("咕嘎咕嘎,真呀真多呀");
bw.newLine();
bw.write("数不清到底多少鸭");
bw.close();
writer.close();//关闭输出流,不然会一直占用空间
//缓存输入,在控制台显示
FileReader reader = new FileReader(file);
BufferedReader br = new BufferedReader(reader);
String s1 = br.readLine();
System.out.println("第一行:"+s1);
System.out.println("第二行:"+br.readLine());
System.out.println("第三行:"+br.readLine());
System.out.println("第四行:"+br.readLine());
reader.close();//关闭
}
}

15.5:数据输入/输出流
package fifteenth;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class DataStreamDemo {
public static void main(String[] args) throws IOException {
//输入文件里面
File file = new File("D:\\word.txt");
FileOutputStream isr = new FileOutputStream("gbk");
DataOutputStream zhw = new DataOutputStream(isr);
FileOutputStream fos = new FileOutputStream(file);//先拿到普通字节流,传入参数告诉他往哪里输出
DataOutputStream dos = new DataOutputStream(fos);//转化数据流
dos.writeBoolean(false);
dos.writeUTF("你好世界");//好处是规定类型,text编码集相同就可以显示
dos.writeDouble(88.88);//坏处无法看懂,存入是可以的
dos.close();
fos.close();//乱码
isr.close();
zhw.close();
//输出控制台里面
FileInputStream fis = new FileInputStream(file);
DataInputStream dis = new DataInputStream(fis);
System.out.println(dis.readBoolean());
System.out.println(dis.readUTF());//utf可以读出
System.out.println(dis.readDouble());//read方法无法读出chars
dis.close();
fis.close();
}
}


在此次代码内,代码具有两面性,如果txt文本的编码集和utf编码集适配,就会被写入文件
package fifteenth;
import java.io.*;
public class DateSteamDemo {
public static void main(String[] args) {
File file = new File("D:\\word.txt");
try {
// 创建FileOutputStream对象,指定要向其中写入数据的文件
FileOutputStream fos = new FileOutputStream(file);
// 创建DataOutputStream对象,用来向文件中写入数据
DataOutputStream dos = new DataOutputStream(fos);
dos.writeUTF("使用writeUTF()方法写入数据"); // 将字符串写入文件
dos.writeDouble(19.8); // 将double数据写入文件
dos.writeInt(298); // 将int数据写入文件
dos.writeBoolean(true); // 将boolean数据写入文件
dos.close();
fos.close();
// 创建FileInputStream对象,指定要从中读取数据的文件
FileInputStream fis = new FileInputStream(file);
// 创建DataInputStream对象,用来从文件中读取文件
DataInputStream dis = new DataInputStream(fis);
// 读取字符串
System.out.println("readUTF方法读取数据:" + dis.readUTF());
// 读取double数据
System.out.println("readDouble方法读取数据:" + dis.readDouble());
// 读取int数据
System.out.println("readInt方法读取数据:" + dis.readInt());
// 读取boolean数据
System.out.println("readBoolean方法读取数据:" + dis.readBoolean());
dis.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//例题15.6

相关文章:
第十五章:输入输出流I/O
15.1:输入/输出流 文件类:File 字节流:InputStream:入 OutputStream:出 字符流:Reader:入 Writer:出 15.1.1 输入流 InputStream类是字节输入流的抽象类,所有字节流…...
docker命令实例(举例子学习)
docker命令实例 实例1 docker build -t linksoul/chinese-llama2-chat .实例2 docker run --gpus all --ipchost --ulimit memlock-1 --ulimit stack67108864 --rm -it -v pwd/LinkSoul:/app/LinkSoul -p 7860:7860 linksoul/chinese-llama2-chat实例3 docker run -it -p 78…...
excel常用函数
vlookup函数 ISNA函数 ISNA(value) ISNA 函数用于检查指定的值是否为 #N/A 错误值,并返回 TRUE 或 FALSE。 IF 函数 IF(条件, 如果条件为TRUE的值, 如果条件为FALSE的值)...
使用Portainer图形化工具轻松管理远程Docker环境并实现远程访问
文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 Portainer 是一个轻量级的容器管理工具,可以通过 Web 界面对 Docker 容器进行管理和监控。它提供了可…...
Git快速安装【附安装包资源】
软件安装包 项目版本管理软件 Git windows版本安装包 安装步骤 双击按照包之后,直接next 安装位置尽量不要选择C盘,如果只有C盘,可以尝试分盘,如果C盘已经很小了,那就没办法了 选择完安装位置之后,直…...
算法进修Day-33
算法进修Day-33 65. 有效数字 难度:困难 题目要求 有效数字(按顺序)可以分成以下几个部分: 一个 小数 或者 整数(可选)一个 e 或 E ,后面跟着一个 整数 小数(按顺序)…...
开发工具分享 - Mybatis SQL日志格式化H5
目录 一、 序言二、代码示例三、部署至Nginx 一、 序言 平时通过IDEA开发,可以直接装相关MybatisLogFormat的插件直接对控制台里的Mybatis SQL日志进行格式化。一旦离开本地环境,到了测试或者线上,就得自己手动拼参数了。 简单的SQL还好&am…...
好用的办公软件有哪些
日常的工作难免和各种各样的软件打交道,除了传统的Office三件套,小编日常还在用着其他的办公软件,借此跟各位分享其中比较好用、堪称办公神器的8款软件! 1.WPS office 2.office2007 3.EasyConnect 4.ToDesk 5.Photoshop 6.A…...
C#中Abstract、Virtual和Override的使用方法
在C#中,abstract、virtual和override是用于处理类和方法的三个重要关键字,它们的用途和用法如下: Abstract(抽象) 抽象方法是一种只有声明而没有实现的方法。抽象方法只定义了方法的名称、返回类型和参数列表&#x…...
mac电脑安装雷蛇管理软件,实现调整鼠标dpi,移动速度,灯光等
雷蛇官网只给了win版本驱动 mac版本驱动到这里下载: GitHub - 1kc/razer-macos: Color effects manager for Razer devices for macOS. Supports High Sierra (10.13) to Monterey (12.0). Made by the community, based on openrazer. 安装后会显示开发者不明,请丢弃到垃圾桶.…...
Oracle 19c OCM讲义课程:应用SQL执行计划基线的案例
使用SQL执行计划基线可以保证SQL的性能不下降,但实际生产中默认没有开启,这里是姚远老师在给OCM的学员授课中关于SQL执行计划基线的一个案例,大家可以借鉴一下。 关于号主,姚远: Oracle ACE(Oracle和MyS…...
什么是 EDI 857?
EDI 857 的中文含义是装运和账单通知,主要用于供应商传递装运信息和提供采购发票。一个 EDI 857 需要包含与某个具体订单相关联的必要的装运和发票信息,主要包含的业务信息如下: 采购订单编号供应商和买方联系信息产品数量、价格以及诸如 UP…...
OJ项目【登录】——验证码、失败登录多次账户冻结、用户密码加密,我是如何实现的?
目录 前言 1、验证码 1.1、引入pom 1.2、前端核心代码 1.3、后端核心代码 2、账户冻结 2.1、思路: 2.2、核心代码示例: 3、密码加密——加盐算法 3.1、思路: 3.2、代码实现示例: 4、小结:展示我的项目 4…...
js鼠标点击添加图标并获取图标的坐标值
给这个图片添加摄像头图标,并获取图标的坐标值,也就是图标的css样式是positon:absolute,获取left和top的值。 图片1 思路是这样的,获取这里的长度, 图片2 1.鼠标点击时距浏览器的左边距离和上边距离,相当于(0,0)坐标 …...
How to add a jar to a project in eclipse?
Project -> Properties -> Java Build Path -> Libraries -> Add External JARs...
动手实现H5仿原生app前进后退切换效果
动手实现H5仿原生app前进后退切换效果 前言 最近在优化H5页面,我注意到当开发完成的移动端H5页面嵌入到微信小程序或者原生app中时,当触发页面路由切换会与原生app看上去有点格格不入,因为H5页面<router-view>切换路由时是直接替换了…...
【标准化封装 SOT系列 】 D SOT-323 SOT-363
〇、关键词 SC70 。 一、D部分 SOT-323 SOT-363 这个应该叫SC-70可能更合适,典型特征 pin 间距 0.65mm ; body size 2.0mm1.25mm 这一节很像SOT-23,即A部分,因此也是最容易被混淆的。 二、SC70-3 / -5/ -6 鉴于此,封装最好给…...
软件测试肖sir__python之ui自动化实战和讲解03
python之ui自动化实战和讲解...
Kafka序列化反序列化解析、kafka schema
Kafka序列化反序列化解析、kafka schema。 kafka有自己的rpc协议,即nio bytebuf中的数据格式,详见之前的kafka相关介绍的文章。这里我们来看一下大家常用,有时又疑惑的序列化反序列化,对应rpc协议中的records,kafka叫Serdes,实际上也是字面上的意思serialize and deseri…...
谷歌浏览器中如何审查隐藏的元素
谷歌浏览器中如何审查隐藏的元素 方法1: 打开控制台 先鼠标移上先显示出来 快捷键按 CtrlShiftC,只能简单查看宽高,做不到复杂的的样式查询 方法2: 在控制台输入一个以下代码, 并保留光标在控制台闪烁,鼠标移上去显示…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
leetcode73-矩阵置零
leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...
13.10 LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析
LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析 LanguageMentor 对话式训练系统架构与实现 关键词:多轮对话系统设计、场景化提示工程、情感识别优化、LangGraph 状态管理、Ollama 私有化部署 1. 对话训练系统技术架构 采用四层架构实现高扩展性的对话训练…...
Java中HashMap底层原理深度解析:从数据结构到红黑树优化
一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一,是基于哈希表的Map接口非同步实现。它允许使用null键和null值(但只能有一个null键),并且不保证映射顺序的恒久不变。与Hashtable相比,Hash…...
TMC2226超静音步进电机驱动控制模块
目前已经使用TMC2226量产超过20K,发现在静音方面做的还是很不错。 一、TMC2226管脚定义说明 二、原理图及下载地址 一、TMC2226管脚定义说明 引脚编号类型功能OB11电机线圈 B 输出 1BRB2线圈 B 的检测电阻连接端。将检测电阻靠近该引脚连接到地。使用内部检测电阻时,将此引…...
