JavaEE初阶之IO流快速顿悟一(超详细)

目录

题外话

正题

IO流

Java.io.FileInputStream

[int read()](#int read())

[int read(byte[] b)](#int read(byte[] b))

关于异常

[Java7的新特性: try-with-resources ( 资源自动关闭)](#Java7的新特性: try-with-resources ( 资源自动关闭))

Java.io.FileOutputStream

[void write(int b)](#void write(int b))

[void write(byte[] b)](#void write(byte[] b))

小结


题外话

十年青铜无人问,一朝顿悟冲王者

前天去玩了,昨天学习了新内容,奈何状态不佳

我写一篇博客快一点就一个小时多,慢一点需要两个小时

对我来说还是很费力的,很想把知识点很详细的告诉大家,让大家觉得看我写的博客和看视频一样生动形象

喜欢的家人们记得给个三连(点赞关注收藏!!!)

正题

IO流

java Io 流这块有四大家族:

java. io. Inputstream 字节输入流

java . io. Outputstream 字节输出流

java . io. Reader 字符输入流

java. io. Writer 字符输出流

四大家族的首领都是抽象类。(abstract class)

文件专属类:

java. io. FileInputstream

java. io. FileOutputstream

java. io. FileReader

java. io. FileWriter

转换流类:

( 将字节流转换成字符流)

java. io. InputStreamReader

java. io. Outputs treamWriter

缓冲流专属类:

java. io. Buf fe redReader

java. io. Bufferedwriter

java. io. BufferedInputstream

java. io. Buf feredOu tputs tream

数据流专属类:

java. io. DataInputstream

java. io. DataOutputstream

标准输出流类:

java. io. PrintWriter

java. io.Printstream

对象专属流类:

java. io. ObjectInputstream

java. io . objectoutputstrean

打印流相关的类:

java. io. PrintWriter

java. io.Printstream

字节数组相关的类:

ByteArrayInputStream

ByteArrayOutputStream

压缩和解压缩相关的类:

GZIPInputStream

GZIPOutputStream

线程相关的类:

PipedInputStream

PipedOutputStream

所有的流都实现了: java. io. Closeable接口,都是可关闭的,都有close()方法。

流毕竟是一个管道,这个是内存和硬盘之间的通道,用完之后一定要关闭,不然会耗费(占用)很多资源。养成好习惯,用完流一定要关闭。

注意:在java中只要"类名"以stream结尾的都是字节流。以"Reader/Writer"结尾的都是字符流

本篇博客详细讲解下FileInputStream类,FileOutputStream类

Java.io.FileInputStream

1.文件字节输入流,负责读

2. 是一个万能流,任何文件都能读。但还是建议读进制文件。 例如:图片,声音,视频等。

3. 但是FileInputStream肯定 也是可以读普通文本的。只不过一次读取一个字节。容易出现乱码问题。

4. FileInputStream 的常用构造 方法:

FileInputStream(String name) 通过文件路径构建一个 文件字节输入流对象。

5. FileInputStream 的常用方法:

int read(); 调用一次read() 方法则读取个字节, 返回读到的字节本身。如果读不到任何数据则返回-1

int read(byte[] b); 一次最多可以读到b. length个字节[只要文件内容足够多)。返回值是读取到的字节数量。如果这一 次没有读取到任何数据,则返回-1

int read(byte[] b, int off, int Len); 一次读取Len个字节。将读到的数据从byte数组的off位置开始放,一共放len字节。

void close() 关闭流

long skip(Long n); 跳过n个字节。

int available(); 获取流中剩余的估计字节数。

以下我将用代码例子一一列举FileInputStream中的常用方法

int read()

|-------|-------------------------------------------------------------------------------|
| int | read() 从此输入流中读取一个数据字节。 |

先说说 int read()这个方法,调用这个方法一次读取一个字节,并且返回int类型值,如果文件内容已经读完将会返回-1

例如

public static void main(String[] args) {

//创建InputStream对象

InputStream in=null;

{

try {

//使用多态new一个FileInputStream并传入文件路径作为参数

in = new FileInputStream("D:\\白\\file1.txt");

//创建readByte接收in.read()返回值

int readByte;

//用readByte作为接收in.read()返回值,当readByte不等于-1

while ((readByte=in.read())!=-1)

{

//打印readByte

System.out.println(readByte);

}

} catch (IOException e) {

e.printStackTrace();

}

finally {

//当in不为空的时候一定要记得关闭,调用close()方法

if (in != null) {

try {

in.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

}

文件内容

运行结果如下

int read(byte[] b)

|--------|---------------------------------------------------------------------------------------------------------------------------|
| int | read(byte[] b) 从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。 |

我们可以往read()方法中传入byte数组,每次读取会根据数组大小进行读取,每次返回值为读取的大小,内容读取完毕再读取会返回-1

演示一下

这是我们要进行读取的文件

代码如下

public class FileInputStreamTest02 {

public static void main(String[] args) {

InputStream in=null;

//创建byte数组大小为4

byte[] bytes=new byte[4];

创建read记录每次读取大小

int read=0;

try {

in=new FileInputStream("D:\\白\\file1.txt");

//将读取大小传入read,如果不为-1则转换成字符串,并打印输出

while ((read=in.read(bytes))!=-1)

{

String s1=new String(bytes,0,read);

System.out.println(s1);

}

} catch (IOException e) {

e.printStackTrace();

}

finally {

try {

if (in!=null) {

in.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

运行结果

关于异常

大家可以看到这里会有许多异常

这些异常我们都需要去处理,

FileNotFoundException这个异常继承于IOException的异常,大家catch的时候就可以直接写IOException异常

Java7 的新特性: try-with-resources ( 资源自动关闭)

凡是实现了Closeable接口的流都可以使用try-with-resources.都会自动关闭。

try-with-resources 语法格式:

try(

声明流手

声明流;

声明流;

声明流;

声明流

){

}catch(Exception e){

}

接下来的内容我都会使用try-with-resources的方式

Java.io.FileOutputStream

1. 文件字节输出流,负责写。

2. 常用构造方法:

File0utputStream(String name)

创建一个文件字节输出流对象,这个流在使用的时候,最开始会将原文件内容全部清空,然后写入。

FileOutputStream(String name, boolean append)

创建一个文件字 节输出流对象,当append是true的时候, 不会清空原文件的内容,在原文件的末尾追 加写入。

创建个文件字 节输出流对象,当append是false的时候, 会清空原文件的内容,然后写入。

3. 常用方法:

void close();

void write(int b); 写一个字节

void write(byte[] b); 将整个byte字节数组写出

void write(byte[] b, int off, int Len) 将byte字节数组的一部分写出

void write(int b)

返回值为空,会将参数b以ASCII码的形式写入文件中

演示一下!

这是我们现在的文件内容

public class FileOutputStreamTest01 {

public static void main(String[] args) {

try (OutputStream out=new FileOutputStream("D:/白/file1.txt")){

//写入以下内容

out.write(98);

out.write(99);

out.write(100);

}

catch (IOException e) {

throw new RuntimeException(e);

}

}

}

当我们运行结束之后就会清空,并存入我们写好的内容

void write(byte[] b)

此方法是将数组中的元素写入指定文件中

这是我们现在的文件

当我们运行以下代码

public static void main(String[] args) {

try(OutputStream out=new FileOutputStream("D:/白/file1.txt"))

{

//建立byte数组,将元素放入

byte[] bytes={97,98,99,100};

//调用write方法将bytes传入

out.write(bytes);

}

catch(IOException e){

e.printStackTrace();

}

}

文件就变成了这样

小结

这两个类主要就是读和写,很简单,.内容不太多

麻烦家人们支持一下(点赞关注收藏!!!)

相关推荐
wclass-zhengge3 分钟前
数据结构篇(绪论)
java·数据结构·算法
何事驚慌4 分钟前
2024/10/5 数据结构打卡
java·数据结构·算法
结衣结衣.5 分钟前
C++ 类和对象的初步介绍
java·开发语言·数据结构·c++·笔记·学习·算法
学习使我变快乐6 分钟前
C++:静态成员
开发语言·c++
TJKFYY7 分钟前
Java.数据结构.HashSet
java·开发语言·数据结构
kylinxjd8 分钟前
spring boot发送邮件
java·spring boot·后端·发送email邮件
杰哥在此16 分钟前
Python知识点:如何使用Multiprocessing进行并行任务管理
linux·开发语言·python·面试·编程
小白学大数据16 分钟前
User-Agent在WebMagic爬虫中的重要性
开发语言·爬虫·http
OLDERHARD16 分钟前
Java - MyBatis(上)
java·oracle·mybatis
杨荧17 分钟前
【JAVA开源】基于Vue和SpringBoot的旅游管理系统
java·vue.js·spring boot·spring cloud·开源·旅游