I/O流基础
I/O流分为很多种,按照操作数据的不同,可以分为字节流和字符流,按照数据传输的方向又可以分为输入流和输出流,程序从输入流中读取数据,向输入流中写入数据。
I/O流概述
在I/O包中:
- 字节流的输入/输出分别用
java.io.InputStream
和java.io.OutputStream
表示。 - 字符流的输入/输出分别用
java.io.Reader
和java.io.Writer
表示。
字节流
在计算机中,无论是文本、图片还是音频和视频,都是以字节的形式存在的,因此要对这些文件进行传输就需要使用字节流,字节流是程序中最常用的流。
根据数据传输方向的不同可将其分为字节输入流和字节输出流,在JDK中提供了两个抽象类
InputStream
和OutputStream
表示字节输入流
和字节输出流
,他们是字节流的两个顶级父类。
InputStream的常用方法:
方法声明 | 功能描述 |
---|---|
int read() | 从输入流中读取数据的下一个字节 |
int read(byte[] b) | 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中 |
int read(byte[] b,int off,int len) | 从输入流中读取若干字节,把它们保存到参数 b 指定的字节数组中,off 指定字节数组开始保存数据的起始下标,len 表示读取的字节数目 |
void close() | 关闭此输入流并释放与该流关联的所有系统资源 |
与InputStream对应的是OutputStream。OutputStream用与写数据,因此OutputStream提供了一些与写数据有关的方法。
InputStream的常用方法:
方法声明 | 功能描述 |
---|---|
void write(int b) | 将指定的字节写入此输出流 |
void write(byte[] b) | 将b.length个字节从指定的byte数组写入此输出流 |
void write(byte[] b,int off,int len) | 将指定byte数组中从偏移量off开始的len个字节写入输出流 |
void flush() | 刷新此输出流并强制写出所有缓冲的输出字节 |
void close() | 关闭此输出流释放与此流有关的所有系统资源 |
字节流的读/写操作
字节流的读操作:
import java.io.File;
import java.io.FileInputStream;
public class IORead {
public static void main(String[] args) {
FileInputStream stream = null;
try {
// 文件的路径
File file = new File("D:\\ideaCode\\testdemo\\src\\Test.txt");
stream = new FileInputStream(file);
int i = 0;
while (true) {
i = stream.read();
if (i == -1) {
break;
}
// 十进制数据
System.out.println(i);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
字节流的写操作:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class IOWrite {
public static void main(String[] args) {
FileOutputStream stream = null;
try {
File file = new File("D:\\ideaCode\\testdemo\\src\\Test1.txt");
stream = new FileOutputStream(file);
String s = "hello";
byte[] bytes = s.getBytes();
for (byte aByte : bytes) {
stream.write(aByte);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if (stream!=null) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
字符流
字符流的目标通常是文本文件。Reader和Writer是java.io包中所有字符流的抽象父类。在java中,字符采用的是Uniocde
字符编码,常见的字符输入/输出流是由Reader和Writer抽象类派生出来的,处理数据时以字符为基本单位。
字符流的读/写操作
字符流的读操作:
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class IORead {
public static void main(String[] args) {
FileReader stream = null;
try {
File file = new File("D:\\ideaCode\\testdemo\\src\\Test1.txt");
stream = new FileReader(file);
int i;
while ((i=stream.read())!=-1) {
System.out.println((char) i);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
字符流的写操作:
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
public class IOWrite {
public static void main(String[] args) {
FileWriter stream = null;
try {
File file = new File("D:\\ideaCode\\testdemo\\src\\Test1.txt");
stream = new FileWriter(file);
String s = "hello,你好";
stream.write(s);
} catch (IOException e) {
e.printStackTrace();
}finally {
if (stream!=null) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
本文就说这么多,关于IO流还有缓冲流,文件删除等其他操作,感兴趣可以接着下去了解一下。