0x01 目录结构

  1. # 目录结构
  2. ├── FileReadTest
  3. ├── FileInputStreamTestReadDemo.java
  4. ├── FileReaderTestReadDemo.java
  5. ├── FilesTestReadDemo.java
  6. ├── RandomAccessFileTestReadDemo.java

0x02 相关例子

0x02.1 FileInputStream

  1. // 文件名: FileInputStreamTestReadDemo.java
  2. package FileReadTest;
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.IOException;
  7. public class FileInputStreamTestReadDemo {
  8. public static void main(String[] args) {
  9. // 要读取的文件
  10. File f = new File("/etc/hosts");
  11. FileInputStream fis = null;
  12. try {
  13. // 打开文件对象并创建文件输入流
  14. fis = new FileInputStream(f);
  15. // 定义每次 输入流 读取到的字节数
  16. int l;
  17. // 定义缓冲区大小
  18. byte[] bytes = new byte[1024];
  19. // 创建二进制输出流对象
  20. ByteArrayOutputStream out = new ByteArrayOutputStream();
  21. // 循环读取文件内容
  22. while ((l = fis.read(bytes)) != -1) {
  23. // 截取缓冲区数组中的内容
  24. // 下标0开始截取,l 表示每次输入流读取到的字节数。
  25. out.write(bytes, 0, l);
  26. }
  27. // 输出读取到的内容
  28. System.out.println(out.toString());
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. } finally {
  32. try {
  33. // 强制关闭输入流
  34. fis.close();
  35. } catch (IOException e) {
  36. e.printStackTrace();
  37. }
  38. }
  39. }
  40. }

0x02.2 FileReader

  1. // 文件名: FileReaderTestReadDemo.java
  2. package FileReadTest;
  3. import java.io.FileReader;
  4. import java.io.IOException;
  5. public class FileReaderTestReadDemo {
  6. public static void main(String[] args) {
  7. FileReader fr = null;
  8. try {
  9. // 打开文件对象
  10. fr = new FileReader("/etc/hosts");
  11. // 定义每次 输入流 读取到的字节数
  12. int l;
  13. // 定义缓冲区大小
  14. char[] buf = new char[6];
  15. // 用与保存读取文件内容的
  16. StringBuilder out = new StringBuilder();
  17. // 循环读取文件内容
  18. while((l = fr.read(buf)) != -1){
  19. String str = new String(buf, 0, l);
  20. out.append(str);
  21. }
  22. // 输出读取到的内容
  23. System.out.print(out);
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. } finally {
  27. try {
  28. // 强制关闭输入流
  29. fr.close();
  30. } catch (IOException e) {
  31. e.printStackTrace();
  32. }
  33. }
  34. }
  35. }

0x02.3 Files

  1. // 文件名: FilesTestReadDemo.java
  2. package FileReadTest;
  3. import java.nio.file.Files;
  4. import java.nio.file.Path;
  5. import java.nio.file.Paths;
  6. public class FilesTestReadDemo {
  7. public static void main(String[] args) {
  8. // 要读取的文件
  9. Path path = Paths.get("/etc/hosts");
  10. try {
  11. byte[] bytes = Files.readAllBytes(path);
  12. String out = new String(bytes);
  13. System.out.println(out);
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. }
  17. }
  18. }

0x02.4 RandomAccessFile

  1. // 文件名: RandomAccessFileTestReadDemo.java
  2. package FileReadTest;
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.File;
  5. import java.io.IOException;
  6. import java.io.RandomAccessFile;
  7. public class RandomAccessFileTestReadDemo {
  8. public static void main(String[] args) {
  9. // 要读取的文件
  10. File f = new File("/etc/hosts");
  11. RandomAccessFile raf = null;
  12. try {
  13. // 创建 RandomAccessFile对象
  14. // 共有:
  15. // r(只读)、rw(读写)、rws(读写内容同步)、rwd(读写内容或元数据同步) 模式打开文件
  16. raf = new RandomAccessFile(f, "r");
  17. // 定义每次 输入流 读取到的字节数
  18. int l;
  19. // 定义缓冲区大小
  20. byte[] bytes = new byte[1024];
  21. // 创建二进制输出流对象
  22. ByteArrayOutputStream out = new ByteArrayOutputStream();
  23. // 循环读取文件内容
  24. while ((l = raf.read(bytes)) != -1) {
  25. // 截取缓冲区数组中的内容
  26. // 下标0开始截取,l 表示每次输入流读取到的字节数。
  27. out.write(bytes, 0, l);
  28. }
  29. // 输出读取到的内容
  30. System.out.println(out.toString());
  31. } catch (Exception e) {
  32. e.printStackTrace();
  33. } finally {
  34. try {
  35. // 强制关闭输入流
  36. raf.close();
  37. } catch (IOException e) {
  38. e.printStackTrace();
  39. }
  40. }
  41. }
  42. }