流的概念
应该是基于 Linux 的概念吧,Java 和 C/C++ 一样,也使用“流”的概念来描述不同介质之间信息的传递。数据源可以是文件,也可以是数据库,网站 API 接口,甚至别的程序。
文件输入流
FileInputStream(文件字节输入流) 是 InputStream(字节输入流)的子类。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
File f = new File("d:/lol.txt");
// 创建基于字节的文件输入流
FileInputStream fis = new FileInputStream(f);
// 通过这个输入流,就可以把数据从硬盘,读取到Java的虚拟机中来,也就是读取到内存中
} catch (IOException e) {
e.printStackTrace();
}
}
}
文件字节流的读取
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
//准备文件lol.txt其中的内容是AB,对应的ASCII分别是65 66
File f =new File("lol.txt");
//创建基于文件的输入流
FileInputStream fis =new FileInputStream(f);
//创建字节数组,其长度就是文件的长度
byte[] all =new byte[(int) f.length()];
//以字节流的形式读取文件所有内容
fis.read(all);
for (byte b : all) {
//打印出来是65 66
System.out.println(b);
}
//每次使用完流,都应该进行关闭
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
文件输出流
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
// 准备文件lol2.txt其中的内容是空的
File f = new File("lol2.txt");
// 准备长度是2的字节数组,用88,89初始化,其对应的字符分别是X,Y
byte data[] = { 88, 89 };
// 创建基于文件的输出流
FileOutputStream fos = new FileOutputStream(f);
// 把数据写入到输出流
fos.write(data);
// 关闭输出流
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
流的关闭
- 在 try 中关闭,但是如果检测到异常的话,这个流不会自动关闭,可能导致潜在的风险
- 在 finally 中关闭(这需要额外判断一下,比较繁琐,但是最安全)