IO操作

article/2025/10/5 16:23:12

一、简介


IO流是用来处理设备之间的数据传输的,数据一般储存在设备上

设备:硬盘,光盘,内存等等,内存是临时储存的

Java对数据的操作是采用流的方式

按照操作的数据分为:字节流和字符流

暗照流向:输入流和输出流(相对于内存),读和写


二、字节流


Writer:写,输出流

Reader:读,输入流

字节流2个顶级父类InputStream(输入流)OutputStream(输出流),它们都是抽象类

FileInputStream(文件输入流类)继承自InputStream(输入流),封装了对文件的读取操作,通过文件路径或者文件对象构造一个FileInputStream(文件输入流类)对象


FileOutPutStream(文件输出流)继承自OutputStream(输出流),封装了对文件的写入操作,通过文件路径或者文件对象构造一个FileInputStream(文件输出流)对象。

InputStream提供的方法主要有:

序号

方法

功能说明

1

read( )

读取一个字节

2

read(byte[] b)

读取多个字节至数组b中

3

read(byte[] b, int off, int len)

读取多个字节至数组从off开始的len个字节中

4

skip(long n)

跳过n个字节

5

close

关闭输入流

 

 

OutputStream提供的方法主要有:

序号

方法

功能说明

1

write(int n )

写入一个字节(注意只写入低8位)

2

write (byte[] b)

写入数组b中的全部字节

3

write (byte[] b, int off, int len)

写入数组b中从off开始len个字节

4

flush( )

刷新输出流,即强制输出(因有缓冲机制)

5

close

关闭输入流

FileInputStream(文件输入流类)继承自InputStream(输入流),封装了对文件的读取操作,通过文件路径或者文件对象构造一个FileInputStream(文件输入流类)对象。

FileOutPutStream(文件输出流)继承自OutputStream(输出流),封装了对文件的写入操作,通过文件路径或者文件对象构造一个FileInputStream(文件输出流)对象。

ObjectInputStream(对象输入流)ObjectOutPutStream(对象输出流)分别封装了其它类型数据的读、写操作,ObjectInputStream(对象输入流)构造函数传递需要InputStream(输入流)子类的对象,ObjectOutPutStream(对象输出流)构造函数传递需要OutPutStrea(输出量)子类的对象。

ObjectInputStream(对象输入流)提供的方法主要有:

序号

方法

功能说明

1

readInt、readFloat、readLong…

读取基本类型数据

2

readObject

读取引用类型数据(需反序列化)

 

ObjectOutPutStream(对象输出流)提供的方法主要有:

序号

方法

功能说明

1

writeInt、writeFloat、writeLong…

写入基本类型数据

2

writeObject

写入引用类型数据(需序列化)

ObjectOutPutStream(对象输出流)向文件中输出123和“abc”,结果如下:

所谓序列化就是将内存中的对象存储到外存上去。反序列化则反之,即将外存中的数据读入到内存中的对象中。
ObjectInputStream(对象输入流)ObjectOutPutStream(对象输出流)分别封装了其它类型数据的读、写操作,ObjectInputStream(对象输入流)构造函数传递需要InputStream(输入流)子类的对象,ObjectOutPutStream(对象输出流)构造函数传递需要OutPutStrea(输出量)子类的对象。

内存中的数据在关机后就不存在了,而外存的数据是可以永久保存的。比如游戏过程中的保存游戏,就是将某个时刻的游戏状态(比如生命值、金钱、等级等)数据保存到硬盘上;而读取游戏就是根据从文件中恢复游戏的状态。

这些数据可能是一个对象,也可能是多个对象组成的复杂数据,如果逐个将原子数据写入到文件中去,不仅复杂,而且在写入和保存的步骤和数据应该严格一致,否则数据就会错位。

序列化是将对象(不管多么复杂)整体写入文件中,将来也是整体读取,简化了读写操作。

三、字符流


Reader提供的方法主要有:

序号

方法

功能说明

1

read( )

读取一个字符

2

read(char []b)

读取多个字节至数组b中

3

read(char []b, int off, int len)

读取多个字节至数组从off开始的len个字节中

4

skip(long n)

跳过n个字符

5

close

关闭输入流

 

 

Writer提供的方法主要有:

序号

方法

功能说明

1

write(int n )

写入一个字符(注意只写入低8位)

2

write (char []b)

写入数组b中的全部字符

3

write (char []b, int off, int len)

写入数组b中从off开始len个字符

4

write (String str)

写入字符串中的全部字节

5

write (String str, int off, int len)

写入字符串中从off开始len个字符

6

flush( )

刷新输出流,即强制输出(因有缓冲机制)

7

close

关闭输入流

 

FileReadeer(文件阅读器)FileWriter(文件输出流)分别实现了Reader和Writer。

缓冲机制用于应用程序和物理数据时降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。比如快递寄送点,并不是每收一个寄件就发送出去,而是收集到一定数量或一定时间后再整体发送。

案例:

C203_03_06_FileWriter

package 第三章_IO操作.C203_03_05_FileWriter;import java.io.FileWriter;
import java.io.IOException;public class Demo {publicstatic void main(String[] args)throws IOException{//FileWriter字符输出流FileWriterfw=new FileWriter("C:\\test5.txt");fw.write(97);fw.write("123");fw.close();}
}

C203_03_07_FileReader

package 第三章_IO操作.C203_03_06_FileReader;import java.io.FileReader;public class Demo {publicstatic void main(String[] args)throws Exception{//FileReader字符流FileReaderfr=new FileReader("C:\\test.txt");int a=fr.read();char []str=new char[3];fr.read(str);System.out.println(a);System.out.println(str);fr.close();}
}

四、File类

C203_03_08_缓冲机制

package 第三章_IO操作.C203_03_08_缓冲机制;import java.io.BufferedOutputStream;
import java.io.IOException;public class Demo {publicstatic void main(String[] args)throws IOException{BufferedOutputStream bos=new BufferedOutputStream(System.out,3);bos.write('a');bos.write('b');bos.write('c');bos.write('d');bos.write('e');bos.flush();bos.close();}
}


File类封装了对文件和目录的属性操作。目录也可以理解为一种特殊文件,下文中都统一称之为文件。

序号

方法

功能说明

1

File(String path)

根据路径构造一个文件

2

getName()

获取文件名

3

exists()

判断文件是否存在

4

isDirectory()

判断是否为目录

5

isFile()

判断是否为文件

6

length()

获取文件的大小

7

close

关闭输入流

8

delete()

删除文件

9

list()

列举文件或目录

10

listFiles()

列举文件

11

mkdir()

创建目录

12

renameTo

重命名,实际上也可以实现移动

 

案例:

C203_03_09_文件操作

package 第三章_IO操作.C203_03_07_文件操作;import java.io.File;public class Demo {publicstatic void main(String[] args)throws Exception{//File文件Filefile=new File("C:\\test6.txt");if(!file.exists()){//exists存在file.createNewFile();//createNewFile创建新文件}System.out.println(file.getName());System.out.println(file.length());}
}

C203_03_10_目录操作

package 第三章_IO操作.C203_03_10_目录操作;import java.io.File;public class Demo {publicstatic void main(String[] args) {File dir=new File("C:/dir");if(!dir.exists()){dir.mkdir();//创建一个新的子目录}File dir1=new File("C:/dir/dir1");dir1.mkdir();File dir2=new File("C:/dir/dir2");dir2.mkdir();String []dirs=dir.list();for(Stringd:dirs){System.out.println(d);}}
}


 






http://chatgpt.dhexx.cn/article/iAXynrWR.shtml

相关文章

Java基础--IO操作

一、IO原理及分类 一、IO原理 1、I/O是Input/Output的缩写,I/O技术是非常实用的技术,用于处理设备之间的数据传输,如读写文件,网络通信等。 2、java程序中对于数据的输入/输出操作一般都是以流的方式进行 3、java.io包下提供各…

关于I/O操作

https://blog.csdn.net/deram_boy/article/details/51191425 提及这个,就想到了各种文件操作,这种流,什么reader 啊, writer啊,buffer啊,file啊。但是综合的东西与总结,只是曾经了解。因为工作…

IO操作概念

IO:输入输出,对程序的输入与输出 文件:一组有关数据的集合 文件名:这组数据的名字 linux系统中所有文件均属于文件(通过文件系统进行管理) 按类型分类: 1、普通文件 (…

I/O操作

前言 I/O操作即操作存储器,所以想了解I/O操作,需要了解一点存储器相关知识点。 计算机存储器 存储器是计算机的核心部件之一,在完全理想的状态下,存储器应该要同时具备以下三种特性: (1)速度…

操作系统_04_IO相关(个人总结)

声明: 1. 本文为我的个人复习总结, 并非那种从零基础开始普及知识 内容详细全面, 言辞官方的文章 2. 由于是个人总结, 所以用最精简的话语来写文章 3. 若有错误不当之处, 请指出 软硬链接 软链接(快捷方式): 删除原文件时, 软链接则失效 硬链接…

gcc 命令

gcc 命令 GCC 编译器 gcc 命令格式 gcc 选项 文件名字主要选项 -c&#xff1a; 只编译不链接为可执行文件&#xff0c;编译器将输入的.c 文件编译为.o 的目标文件。-o&#xff1a; <输出文件名>用来指定编译结束以后的输出文件名&#xff0c;如果不使用这个选项的话 G…

Ubuntu Linux gcc的常用命令

目录 一、gcc简介 二、简单的gcc编译 1 预处理 2 编译为汇编语言代码 3 汇编 4 连接 三、多个程序文件的编译 四、检查错误 五、连接库文件 1 编译成可执行文件 2 链接 3 强制链接时使用静态链接库 六、总结 一、gcc简介 Linux系统下的Gcc&#xff08;GNU C Compi…

Linux GCC 编译详解

文章目录 一、GCC 编译器简介二、GCC 工作流编程语言的发展GCC 工作流程gcc 和 g 的区别 三、使用 GCC 编译GCC 编译格式GCC 编译流程多个源文件编译 一、GCC 编译器简介 首先&#xff0c;什么是编译器呢&#xff1f; 我们可以使用编辑器&#xff08;如 linux 下的 vi、window…

gcc编译命令的常用选项——强烈推荐大家使用 -Wall 选项

C程序编编译的过程分为如下四个阶段 1.预处理&#xff1a;头文件展开&#xff08;#include&#xff09;、宏替换&#xff08;#define&#xff09;、条件编译&#xff08;#ifdef&#xff09;(.i)使用预处理器&#xff08;预处理阶段处理的都是以#开头的代码&#xff09; 2.编译…

Linux(gcc编译原理、过程以及常用调试命令)

PS&#xff1a;红色字体表示重点&#xff0c;绿色字体表示重要标题&#xff0c;块引用中表示Linux终端中的命令。 1.gcc / g的安装 命令&#xff1a;sudo apt install gcc /gcc 2.gcc编译连接 //main.c文件 &#xff08;1&#xff09;预编译 ①删除所有的“#define”&#…

Linux中gcc编译步骤

我们这里以C语言为例&#xff0c;看看C语言程序在Linux中编译执行的详细步骤 1.创建一个.c文件 2.写入一些简单的代码 我们使用gcc -E filename.c -o filename.i 命令对程序先进行预处理&#xff1a;处理头文件、宏定义&#xff0c;接下来我们修改一下头文件&#xff0c;使用错…

Linux GCC常用命令

目录 一、示例一 1.简单编译 1.1预处理 1.2编译为汇编代码 1.3汇编 1.4连接 2.多个程序文件的编译 3检错 4库文件连接 二、示例二 1.准备hello.c 2.预处理 3.编译 4.汇编 5.链接 6.分析ELF文件 6.1ELF文件的段 6.2反汇编ELF 一、示例一 1.简单编译 创建文件mkd…

GCC编译过程及基本命令总结

一、GCC简介 GCC即GNU Compiler Collection&#xff0c;原本只是针对C语言的编译工具&#xff0c;现在已经变成了一个工具集&#xff0c;包含了C、C、JAVA等语言的集合体。 管理和维护&#xff1a;由GNU项目负责。 二、GCC对C、C的编译流程 (1) 预处理&#xff08;Preproce…

Linux 下的 gcc 编译常用命令

gcc&#xff1a;Linux下的一款编译器。 gcc工作流程&#xff1a; 完整编译流程&#xff1a; 创建一个c语言源文件&#xff1a; gcc -E hello.c -o hello.i&#xff08;头文件展开&#xff0c;进行源文件中的宏替换&#xff0c;注释过滤&#xff09; gcc -S hello.i -o hello.…

GCC命令编译

1.GCC编译过程&#xff08;原理如下&#xff0c;使用命令请见2&#xff09; 从 hello.c 到 hello(或 a.out)文件&#xff0c; 必须历经 hello.i、 hello.s、 hello.o&#xff0c;最后才得到 hello(或a.out)文件&#xff0c;分别对应着预处理、编译、汇编和链接 4 个步骤&#…

gcc 命令详解及最佳实践

介绍 GCC&#xff08;英文全拼&#xff1a;GNU Compiler Collection&#xff09;是 GNU 工具链的主要组成部分&#xff0c;是一套以 GPL 和 LGPL 许可证发布的程序语言编译器自由软件&#xff0c;由 Richard Stallman 于 1985 年开始开发。 GCC 原名为 GNU C语言编译器&#…

使用GCC编译程序常用命令

一、编译器驱动程序 首先梳理一下源文件到可执行文件的整个过程&#xff0c;下面是两个源文件的组成main.c和sum.c // main.c int sum(int *a, int n); int array[2] { 1, 2 }; int main() {int val sum(array, 2);return val; }// sum.c int sum(int *a, int n) {int i, s…

matlab 反向二值化,MATLAB:图像二值化、互补图(反运算)(im2bw,imcomplement函数)...

图像二值化、反运算过程涉及到im2bw&#xff0c;imcomplement函数&#xff0c;反运算可以这么理解&#xff1a;原本黑的区域变为白的区域&#xff0c;白的区域变为黑的区域。 实现过程如下&#xff1a; close all;%关闭当前所有图形窗口&#xff0c;清空工作空间变量&#xff0…

图像处理Matlab阈值的设置imadjust(),graythresh(),im2bw()函数使用

1、imadjust()函数调节图像的对比度(若图像较暗&#xff0c;可用imadjust函数命令来调节图像的对比度) I1imadjust(I,stretchlim(I),[0;1]); % stretchlim(I2)自适应找到一个分割阈值向量来改变一幅图像的对比度 figure,imshow(I1); 2、matlab中DIP工具箱函数im2bw使用阈值&…

MATLAB--对于im2bw函数的优化

由于我在研究的是uint8图像&#xff0c;所以对于优化im2bw函数的形式为&#xff1a;im2bw(uint8[], T)&#xff0c;不过其它形式也可以由类似思想导出。 测试代码&#xff1a;遍历8个图像得出时间 for n1:8cchar(str(n));fimread(c);testtime3%要测试的代码 end 算法一 tic fR…