Java IO
Java的输入流和输出流
“流”是指从源“流向”目的地的数据流,Java把各种数据源和目标之间数据的传输统一抽象为流,通过对流的读写操作来实现IO操作
首先通过一张图片来了解Java IO(图片来自菜鸟教程)
看了图片之后可以知道IO操作离不开Reader,Writer,InputStream,OutputStream这四个顶级接口,其他继承自这四个接口的有各自的用途,但最常用的方法还是来自这四个接口
InputStream
先来看一段代码,创建输入流很简单
public class Main {
public static void main(String[] args) throws FileNotFoundException {
String file = "文件地址";
InputStream inputStream = new FileInputStream(file);
}
}
常见的用法
public class Main {
public static void main(String[] args) throws IOException {
String file = "文件地址";
InputStream inputStream = new FileInputStream(file);
byte[] list = new byte[1000];
System.out.println("文件长度"+(inputStream.available()));
int b = inputStream.read();
while(b!=1) {
b = inputStream.read();
}
inputStream.read(list);
inputStream.close();
}
}
available()返回输入流下一次调用能够不瘦阻塞的读取或跳过的字节数,大白话解释,没有阻塞返回文件字节数。
read()从输入流读取一个字节返回范围在0~255的一个整数,如果流已读到末尾返回-1,虽然返回值是int,但实际读取双字节字符,比如汉字“中”的编码为“D6D0”,则依次返回214(D6),208(D0)
read(byte[] list)从输入流读取一定数量的字节存入字节数组list,返回读取的字节数
close()关闭输入流,释放资源(这是一个好习惯,虽然Java有自动回收的机制,但是既然没用就早点释放)
OutputStream
输入流和输出流相对,看一个综合例子
import java.io.*;
public class fileStreamTest {
public static void main(String args[]) {
try {
byte bWrite[] = { 11, 21, 3, 40, 5 };
OutputStream os = new FileOutputStream("test.txt");
for (int x = 0; x < bWrite.length; x++) {
os.write(bWrite[x]); // writes the bytes
}
os.close();
InputStream is = new FileInputStream("test.txt");
int size = is.available();
for (int i = 0; i < size; i++) {
System.out.print((char) is.read() + " ");
}
is.close();
} catch (IOException e) {
System.out.print("Exception");
}
}
}
write(int b)将int b的低字节写到输出流
write(byte b[])将数组b写到输出流
close()关闭字节流
Reader,Writer和前面两者区别不大,只是字符流和字节流的区别