JAVA复习之I/0(输入/输出)

IEEE Access投稿全流程:从LaTeX模板到Overleaf实战(附避坑指南) 本文详细解析了向IEEE Access期刊投稿的完整流程,重点介绍了如何使用LaTeX模板在Overleaf平台上高效撰写和格式化论文。内容涵盖模板选择、作者信息填写、公式图表排版、参考文献管理(BibTeX)以及投稿前的最终检查清单,旨在帮助研究者,尤其是LaTeX新手,规避常见技术问题,顺利完成符合期刊严格要求的稿件提交。 阅读详情

在这里插入图片描述

一、什么是流?

在这里插入图片描述

二、什么是输入流?

输入流抽象类有两种,分别是InputStream字节输入流和Reader字符输入流
在这里插入图片描述

(一)InputStream类

InputStream类是字节输入流的抽象类,是所有字节输入流的父类;
类的具体结构层次如下:
在这里插入图片描述
InputStream类中的所有方法遇到错误时都会引发IOException异常,该类常用的方法及说明如表:
在这里插入图片描述
注意:并不是inputStream类的所有子类都支持inputStream中定义的方法,入skip()、mark()、reset()等方法只对某些子类有用。

(二)Reader类

java中的字符是Unicode编码,是双字节,而InputStream类是用来出来单字节的,并不适合处理字符,为此,java提供了专门用来处理字符的Reader类,Reader类是字符输入流的抽象类,也是所有字符输入流的父类,Reader类的具体层次结构如下:
在这里插入图片描述
注意:
Reader类的read()方法的参数为char类型的数组。另外Reader类还提供了一个ready()方法,该方法用来判断是否准备读取流,其返回值为boolean类型。

三、什么是输出流?

输出流抽象类也有两种,分别是OutputStream字节输出流和Writer字符输出流
在这里插入图片描述

(一)OutputStream类

OutputStream类是字节输出流的抽象类,是所有字节输出流的父类,OutputStream类的具体层次如下:
在这里插入图片描述
OutputStream类中的所有方法均没有返回值,在遇到错误时会引发IOException异常,该类的常用方法及说明:
在这里插入图片描述

(二)Writer类

writer类是字符输出流的抽象类,是所有字符输出流的父类,Writer类的层次结构如下:
在这里插入图片描述
Writer类的常用方法及说明如下:
在这里插入图片描述

四、File类

(一)创建文件对象

在这里插入图片描述

(二)File类的使用

在这里插入图片描述

(三)文件操作

在这里插入图片描述

(三)文件夹操作

在这里插入图片描述

五、文件输入/输出流

程序运行期间,大部分数据都被存储在内存中,当程序结束或被关闭时,存储在内存中的数据将会消失,如果需要永久保存数据,最好的方法就是把数据保存到磁盘的文件中,为此提供以下类

(一)FileInputStream类与FileOutputStream类

FileInputStream类:读取文件内容使用;
FileOutputStream类:向文件中写入内容使用

案例剖析:

public class FileStreamTest {
	public static void main(String[] args) {
		File file = new File("word.txt"); // 创建文件对象
		try { // 捕捉异常
			// 创建FileOutputStream对象,用来向文件中写入数据
			FileOutputStream out = new FileOutputStream(file);
			// 定义字符串,用来存储要写入文件的内容
			String content = "你见过洛杉矶凌晨4点的样子吗?";
			// 创建byte型数组,将要写入文件的内容转换为字节数组
			byte buy[] = content.getBytes();
			out.write(buy); // 将数组中的信息写入到文件中
			out.close(); // 将流关闭
		} catch (IOException 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();
		}
	}
}

(二)文件字符流:FileReader类与FileWriter类

使用字符流,写文件时会避免乱码的产生。
在这里插入图片描述
案例剖析:

public class Demo1 {
    public static void main(String[] args) {

        File f = new File("E:\\untitled\\src\\cn\\tx\\Exceriser200\\text005\\word.txt");

        /*
        FileWriter fw = null;

        String st = "天行健,自强不息;地势坤,厚德载物";
        try {
            //加true  表示在源文件后追加新内容
            fw = new FileWriter(f,true);
            fw.write(st);

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(fw != null){
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }*/

        FileReader fr = null;

        try {
            fr = new FileReader(f);
            //创建缓冲区  读取数据
            char ch[] = new char[1024];
            //已经读出的字符数
            int count;
            //循环读取文件中的数据 直到所有字符都读完
            while((count = fr.read(ch))!=-1){
                System.out.println("文件中的内容为:"+new String(ch,0,count));
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fr != null){
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

五、带缓存的输入/输出流

(一)BufferedInputStream与BufferedOutputStream

在这里插入图片描述
案例剖析:

public class BufferedStreamTest {
    public static void main(String args[]) {
        // 定义字符串数组
        String content[] = { "你不喜欢我,", "我一点都不介意。", "因为我活下来,", "不是为了取悦你!" };
        File file = new File("word.txt"); // 创建文件对象
        FileOutputStream fos = null; // 创建FileOutputStream对象
        BufferedOutputStream bos = null; // 创建BufferedOutputStream对象
        FileInputStream fis = null; // 创建FileInputStream对象
        BufferedInputStream bis = null; // 创建BufferedInputStream对象
        try {
            fos = new FileOutputStream(file); // 实例化FileOutputStream对象
            bos = new BufferedOutputStream(fos); // 实例化BufferedOutputStream对象
            byte[] bContent = new byte[1024]; // 创建可以容纳1024个字节数的缓冲区
            for (int k = 0; k < content.length; k++) { // 循环遍历数组
                bContent = content[k].getBytes(); // 将遍历到的数组内容转换为字节数组
                bos.write(bContent); // 将字节数组内容写入文件
            }
            System.out.println("写入成功!\n");
        } catch (IOException e) { // 处理异常
            e.printStackTrace();
        } finally {
            try {
                bos.close(); // 将BufferedOutputStream流关闭
                fos.close(); // 将FileOutputStream流关闭
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            fis = new FileInputStream(file); // 实例化FileInputStream对象
            bis = new BufferedInputStream(fis); // 实例化BufferedInputStream对象
            byte[] bContent = new byte[1024]; // 创建byte数组,用来存储读取到的内容
            int len = bis.read(bContent); // 从文件中读取信息,并存入字节数组中
            // 输出文件数据
            System.out.println("文件中的信息是:" + new String(bContent, 0, len));
        } catch (IOException e) { // 处理异常
            e.printStackTrace();
        } finally {
            try {
                bis.close(); // 将BufferedInputStream流关闭
                fis.close(); // 将FileInputStream流关闭
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

在这里插入图片描述

(二)BufferedReader与BufferedWriter

在这里插入图片描述

1、BufferedReader类的常用方法
在这里插入图片描述
2、BufferedWriter类的常用方法
在这里插入图片描述
3、案例剖析

public class Demo4 {
    public static void main(String[] args) {
        File file = new File("word.txt");
        /*   写入内容到文件里   */
        FileWriter fw = null;
        BufferedWriter bw = null;
        try {
            fw = new FileWriter(file);
            //将文本字符输出流包装成缓冲字符流
            bw = new BufferedWriter(fw);

            String str1 = "世界这么大";
            String str2 = "我想去看看";
            //第一行的数据
            bw.write(str1);
            //创建新行
            bw.newLine();
            //第二行的数据
            bw.write(str2);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //要注意流的关闭顺序,先创建后关闭
            if(bw != null){
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fw != null){
                try {
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        /*   读取文件里内容   */
        FileReader fr = null;
        BufferedReader br = null;
        try {
            fr = new FileReader(file);
            //将文本字符输入流包装成缓冲字符输入流
            br = new BufferedReader(fr);
            String tem = null;
            int i = 1;
            while ((tem = br.readLine()) != null){
                System.out.println("第"+i+"行:"+tem);
                i++;
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(br !=null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fr != null){
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

六、难点解答

(一)字节流和字符流的区别

字节流都是以Stream结尾的,而字符流是以Reader或Writer结尾的。字符流是按照字符来读、写的,所有擅长处理文本信息。字节流是按照最小的字节来读、写的,所以字节流可以处理所有的数据流,但功能没有字符流多。

(二)输入/输出流的使用

以内存为参照对象,当数据从文件流入到内存时,需要使用输入流;当数据从内存流出到文件时,需要使用输出流(将数据打印在显示器上就是一种)

手把手带你搭建一个语音对话机器人:5分钟定制个人AI小助手 通过本文的简单步骤,你已经掌握了如何用 Python 搭建一个语音对话机器人。我们使用了实现语音识别,利用 OpenAI API 生成对话内容,并通过gTTS将文本转换为语音。整个流程非常简洁,你可以根据自己的需求进一步扩展机器人功能,甚至将其集成到实际的应用场景中。 阅读详情

相关推荐

MavLink协议入门

MAVLink是一个非常轻量化的开源的消息协议,用于无人机之间的通信以及无人机机载设备之间的通信。

ffffffeiyu的博客 2474

python将list列表元素写入文件自动换行的三种方式

摘自https://blog.youkuaiyun.com/ckq707718837/article/details/121276357 with open(cls_path,'w') as f1: #方法一: for line in cls_labelList: f1.write(line+'\n') #方法二: # lists=[line+"\n" for line in lists] # ...

梦想是要有的,万一实现了呢! 1万+

汽车零部件产线实战:C#上位机+YOLO实现螺栓装配到位视觉检测

本项目基于C#上位机+YOLOv8实现汽车零部件产线螺栓装配到位视觉检测,全程贴合产线实际场景,从硬件选型、安装调试,到模型训练、上位机开发,再到项目联调、优化扩展,均提供手把手实操指导,代码可直接复制使用,规避了工业视觉产线检测的高频踩坑点。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1331

python经典百题之各项数想加之和

根据等比数列求和公式,10^0 + 10^1 + 10^2 + ... + 10^(n-1) = (10^n - 1) / 9,代入原始公式中可得到s = a * ((10^n - 1) / 9)。对于形如a+aa+aaa+aaaa+...的数列,可以将其表示为a*(10^0 + 10^1 + 10^2 + ... + 10^(n-1)),其中n为项数。具体实现时,可以先生成一个全为1的二进制数,然后依次将其右移,同时加上上一项的值,最终得到总和。缺点:当项数很大时,会生成大量的字符串对象,造成内存浪费。

yechuanhui的专栏 1253

YOLO11 改进、魔改|分组残差自注意力GRSA,通过分组残差优化 QKV 计算、指数空间映射优化位置偏差,在大幅降低自注意力模块参数和计算量的同时,增强特征关系与位置信息的表征能力

【摘要】研究人员提出GRSA(分组残差自注意力)机制,解决Transformer在图像超分辨率任务中效率与性能难以兼顾的问题。GRSA通过分组残差层减少自注意力参数冗余,同时采用指数空间相对位置偏差优化位置信息表征。实验表明,GRSA在降低50%参数量的同时保持模型性能,适用于目标检测和图像分割任务。在YOLO系列模型中集成GRSA可提升小目标检测精度,代码实现已开源,详细部署教程见相关视频与GitHub资源。该机制为轻量化Transformer模型提供了高效解决方案。

qq_64693987的博客 798

GEE APP:基于Sentinel-1 SAR数据的洪水检测与制图系统:利用GEE平台实现洪涝区域提取、面积统计及矢量栅格化导出

本文介绍了一个基于Google Earth Engine平台的Sentinel-1 SAR洪水监测应用,通过自动化流程实现洪水淹没区域的精准检测与分析。系统采用Refined Lee滤波降噪和Otsu自适应阈值算法,结合SRTM地形数据消除干扰,可自动计算淹没面积并生成可视化结果。该工具提供用户友好的交互界面,支持多格式数据导出,适用于灾害应急响应、环境监测和城市规划等领域,具有云平台处理、算法鲁棒性强和操作简便等技术优势。

此星光明博客 327

SparkCore | Rdd依赖关系| 数据读取保存| 广播变量和累加器

阅读目录 Spark中三大数据结构:RDD; 广播变量: 分布式只读共享变量;累加器:分布式只写共享变量;线程和进程之间 1.RDD中的函数传递 自己定义一些RDD的操作,那么此时需要主要的是,初始化工作是在Driver端进行的,而实际运行程序是在Executor端进行的,这就涉及到了跨进程通信,是需要序列化的。 传递一个方法 class Search(query: String){ // extends Serializable //过滤出包含字符串的数据 def isMa...

liuwei0376的专栏 475

VMware使用Windows、WinXP等虚拟机上不了网的解决办法(管用)

这个情况一般出现在可以插网线的电脑上,比如台式机和有网线插口的笔记本。需要转换器才能插网线的笔记本一般不会出现这种情况. 查看主机的IP地址和虚拟机的IP地址是否在同一网段,如果在的话,虚拟机就能上网了!!(备注:虚拟机中的IP地址一定要和主机中的用来上网的那个连接的IP地址相同哦)。

爱吃雪糕的小布丁的博客 1万+

python基础篇-02

python基础2 求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个 数相加),几个数相加由键盘控制。 a=int(input("请输入一个数字:")) b=int(input("请输入相加个数:")) sum=0 print('sum=',end='') for i in range(1,b+1): if i!=b: print('%d+'%a,end='') else: prin

fate_520的博客 1023

【openGauss实战1】openGauss基于CentOS8的部署

基于openGauss数据库在CentOS8上的安装实践。

IT邦德 3050

Swin Transformer 与 CNN 结合实现图像分类

Swin Transformer 与 CNN 结合实现图像分类。(含swin transformer 结构讲解,cnn网络搭建,代码)

这里是Mae。 5027

JMU - Python 第二章

JMU - Python 第二章

qq_59610594的博客 1095

飞牛fnNAS存储模式RAID 5数据恢复

中介绍了fnNAS存储空间的几个模式,细心的网友应该能感受到,我是非常推崇RAID 5的。但我认为,一般人出现1块硬盘损坏后,就能够赶紧采取处理措施了,再高的容灾等级也无法满足这个用户的需求了。》就完成了飞牛NAS存储空间的说明,包括了如何创建、怎么选择空间模式、RAID 5 硬盘故障后的更换、系统更换/重装后数据盘的恢复等等。在VMware中新建虚拟机,安装好fnNAS后,再向虚拟机添加“已有硬盘”(这就是所谓崩溃虚拟机的数据盘),此时新的fnNAS出现提示。在“选择要添加的硬盘”中,选择刚添加硬盘。

dgnankai的专栏 3010

Java中数组的输入输出

数组的输入 首先声明一个int型数组 int[] a 或者 int a[] 给数组分配空间 a=new int[10]; 和声明连起来就是int[] a=new int[10]; 或者是 int a[]=new int[10]; 给数组赋值 a[0]=1;//0代表的是数组的第1个元素 ,元素下标为0 a[1]=1;//1代表的是数组的第2个元素 ,元素下标为0 访问数组数据 ...

菜鸡的博客 4万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java I/O复习

所有输入流类都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类;而所有输出流类都是抽象类OutputStream(字节输出流)或抽象类Writer(字符输出流)的子类。 File类 File类是java.io包中唯一代表磁盘文件的对象,实现创建、删除、重命名文件等操作,File类的对象主要用来获取文件本身的一些信息。 文件的创建与删除 package com.h...

qq_31844483的博客 188

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

## JAVA笔记14 I/O输入输出流

复习 HashMap数据结构是哈希表(JDK1.7 数组+链表) (JDK1.8数组+链表+红黑树) I/O流 I/O :intputstream/outputstream 它是处理设备之间的一个数据传输 我们是站在内存角度来看流的流向 输入流:硬盘---内存 输出流:内存---硬盘 安装流的读取文件的类型分字节流和字符流 字节流可读写任意类型文件 字符...

WarriorsGo的博客 216

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java刷ACM模式的各类输入输出构造

Java刷ACM模式的各类输入输出构造 之前在LeetCode上刷题都是用到核心代码模式,后面面试发现部分笔试题使用的是ACM模式(第一次的时候因为构造输入输出问题,导致无法ac)所以含泪总结一下 1、多行输入 以牛客上的奖学金一题为例,详细见下面代码: package learnACM; import java.util.Arrays; import java.util.Scanner; public class MultilineInput { // 题目 // 小v今年有n门课,每

yjlhz的博客 7820

Java复习——基本输入

7-5jmu-java-01入门-基本输入(10分) 对输入的若干行(每行以空格或者多个空格)数字字符串求和并输出。 输入格式: 每行包含两个数字字符串,中间以一个或者多个空格分隔。 输出格式: 输出两个数的和 输入样例: 1 1 2 3 -100 100 -100 -100 10 0 输出样例: 在这里给出相应的输出。例如: 2 5 0 -20...

云杉木屋 2030

【Java】期末复习知识点总结(2)

Java期末速成~

qq_53869058的博客 2703

Java文件输入输出流及标准I/O流类知识总结

Java文件输入输出流及标准I/O流类知识总结 前几天参加了某企业的笔试,最后一道笔试题的题目大概是这样: 给定文件名filename以及一个字符串str,要求从文件中搜索该字符串,并且输出该字符串所在文件中的行数 背景 这道题考察的是对于文件输入输出流以及字符串的一道基本题目,可以算是比较基本的题目,但是由于太久没有复习,结果写的不是特别好,所以今天对文件输入输出流做一个复习和总结。 这是一张网上找的一张关于IO流操作的图片,这里我们可以看到I/O流分为字节流和字符流,从更加细致的划分,我们应该

weixin_43180484的博客 327

Java复习

自从当上组长以来,我这个组长没有尽职尽责。因为我没有手把手教组员如何学java,我深感愧疚。原因是,自从学习C++与Go之后,Java语法陌生了许多。本文就用来复习Java!

2302_80067378的博客 9243

Java第十章复习 I/O输入输出

Java复习

weixin_62367803的博客 263

【java期末复习题】第10章 Java输入与输出

第10章 Java输入与输出 一、选择题 1.下列代码的运行结果是?( ) public class Test { public static void main(String[] args) { File file = new File("d:\mrsoft.txt"); try { file.createNewFile(); } catch (IOException e) { e.pr

DynamoTUO的博客 2822

牛客网ACM模式 JsV8和Java输入输出练习

文章目录牛客网ACM模式 JsV8和Java输入输出练习背景输入输出语法JS V8JAVAVS Code配置Java运行环境题目1 多行输入多行输出 行数列数确定JS题目2 由第一行输入确定行数 行数不确定列数确定JS题目3 由特定的输入表示输入结束 行数不确定列数确定js题目4 特定的输入结束符 列数不确定JS题目5 行数列数都不确定JS题目6 字符串排序JS题目7 字符串排序 多行输入 牛客网ACM模式 JsV8和Java输入输出练习 背景 事情是这个样子,第一次笔试时发现笔试题是ACM模式,要自己写

好好学习天天向上 8889

【Java 多线程编程 | 从0到1】线程I/O模型

线程I/O模型 2.1 线程与阻塞 I/O 2.1.1 单线程阻塞 I/O 模型 2.1.2 多线程阻塞 1/0 模型 2.2 线程与非阻塞 1/0 模型 2.3 Java 多线程非阻塞I/O 模型 2.4 多线程带来了什么

鱼干的博客 1516

JAVA输入输出

在上半学期中跟着老师学习了JAVA,但深感自己学到的只是很少的一部分,所以在这个假期决定自己再把JAVA复习一下,在复习的同时进一步加深对JAVA的理解,同时提升自己的算法知识(使用了斯坦福的《算法》第四版教材)。 加油吧! 1、标准输出 print()方法会把它的参数放到标准输出中; println()方法会附加一个换行符; printf()方法可以格式化输出,这一点是在JAVA入门时...

weixin_30675967的博客 107
上一篇: JAVA复习之字符串
下一篇: JAVA复习之线程
智汇风渔AI小白
博客等级 码龄7年 1万+粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智汇风渔AI小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值