流的概念

应该是基于 Linux 的概念吧,Java 和 C/C++ 一样,也使用“流”的概念来描述不同介质之间信息的传递。数据源可以是文件,也可以是数据库,网站 API 接口,甚至别的程序。
759.png

文件输入流

FileInputStream(文件字节输入流) 是 InputStream(字节输入流)的子类。

  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. public class Main {
  5. public static void main(String[] args) {
  6. try {
  7. File f = new File("d:/lol.txt");
  8. // 创建基于字节的文件输入流
  9. FileInputStream fis = new FileInputStream(f);
  10. // 通过这个输入流,就可以把数据从硬盘,读取到Java的虚拟机中来,也就是读取到内存中
  11. } catch (IOException e) {
  12. e.printStackTrace();
  13. }
  14. }
  15. }

文件字节流的读取

  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. public class Main {
  5. public static void main(String[] args) {
  6. try {
  7. //准备文件lol.txt其中的内容是AB,对应的ASCII分别是65 66
  8. File f =new File("lol.txt");
  9. //创建基于文件的输入流
  10. FileInputStream fis =new FileInputStream(f);
  11. //创建字节数组,其长度就是文件的长度
  12. byte[] all =new byte[(int) f.length()];
  13. //以字节流的形式读取文件所有内容
  14. fis.read(all);
  15. for (byte b : all) {
  16. //打印出来是65 66
  17. System.out.println(b);
  18. }
  19. //每次使用完流,都应该进行关闭
  20. fis.close();
  21. } catch (IOException e) {
  22. // TODO Auto-generated catch block
  23. e.printStackTrace();
  24. }
  25. }
  26. }

文件输出流

  1. import java.io.File;
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4. public class Main {
  5. public static void main(String[] args) {
  6. try {
  7. // 准备文件lol2.txt其中的内容是空的
  8. File f = new File("lol2.txt");
  9. // 准备长度是2的字节数组,用88,89初始化,其对应的字符分别是X,Y
  10. byte data[] = { 88, 89 };
  11. // 创建基于文件的输出流
  12. FileOutputStream fos = new FileOutputStream(f);
  13. // 把数据写入到输出流
  14. fos.write(data);
  15. // 关闭输出流
  16. fos.close();
  17. } catch (IOException e) {
  18. // TODO Auto-generated catch block
  19. e.printStackTrace();
  20. }
  21. }
  22. }

流的关闭

  1. 在 try 中关闭,但是如果检测到异常的话,这个流不会自动关闭,可能导致潜在的风险
  2. 在 finally 中关闭(这需要额外判断一下,比较繁琐,但是最安全)