目录
[int read()](#int read())
[int read(byte[] b)](#int read(byte[] b))
[Java7的新特性: try-with-resources ( 资源自动关闭)](#Java7的新特性: try-with-resources ( 资源自动关闭))
[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");
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();
}
}
文件就变成了这样

小结
这两个类主要就是读和写,很简单,.内容不太多
麻烦家人们支持一下(点赞关注收藏!!!)