根据给定的文件标题、描述、标签以及部分内容,本文将深入解析Java中读取文件的各种方法,这些方法在日常开发中极为常见且实用。通过详细分析每一行代码,我们将掌握不同场景下选择合适读取策略的技巧。 ### Java读取文件方法大全 #### 1. 字节流方式读取文件 在Java中,使用字节流读取文件是最基础也是最通用的方法之一。主要通过`FileInputStream`和`InputStream`类实现。下面的示例展示了如何逐字节和逐数组读取文件: ```java public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream in = null; try { System.out.println("以字节为单位读取文件内容,一次读一个字节:"); // 一次读一个字节 in = new FileInputStream(file); int tempByte; while ((tempByte = in.read()) != -1) { System.out.write(tempByte); } // 关闭流 in.close(); } catch (IOException e) { e.printStackTrace(); } try { System.out.println("以字节为单位读取文件内容,一次读多个字节:"); // 一次读多个字节 byte[] tempBytes = new byte[100]; int bytesRead = 0; in = new FileInputStream(fileName); // 显示当前流中的可用字节数 ReadFromFile.showAvailableBytes(in); while ((bytesRead = in.read(tempBytes)) != -1) { System.out.write(tempBytes, 0, bytesRead); } } catch (Exception e1) { e1.printStackTrace(); } finally { if (in != null) { try { in.close(); } catch (IOException e1) { } } } } ``` #### 2. 字符流方式读取文件 除了字节流,字符流也是读取文件的重要方式,适用于文本文件的读取。主要通过`FileReader`和`InputStreamReader`类实现: ```java public static void readFileByChars(String fileName) { File file = new File(fileName); Reader reader = null; try { System.out.println("以字符为单位读取文件内容,一次读一个字符:"); // 一次读一个字符 reader = new InputStreamReader(new FileInputStream(file)); int tempChar; while ((tempChar = reader.read()) != -1) { // windows中的\n\r会表示成一个字符,所以读到\n时会有两个字符 // Unix/Linux中\n不会显示,所以读到\n时只会显示一个字符 // Mac中\n\r会被读成两个字符 if (((char) tempChar) != '\r') { System.out.print((char) tempChar); } } reader.close(); } catch (Exception e) { e.printStackTrace(); } try { System.out.println("以字符为单位读取文件内容,一次读多个字符:"); // 一次读多个字符 char[] tempChars = new char[30]; int charRead = 0; reader = new InputStreamReader(new FileInputStream(fileName)); while ((charRead = reader.read(tempChars)) != -1) { // 同上\n处理 } } catch (Exception e1) { e1.printStackTrace(); } } ``` #### 3. 使用BufferedReader优化读取 对于字符流的读取,使用`BufferedReader`可以显著提高效率,尤其在读取大文件时更为明显。`BufferedReader`内置了缓冲区,能够减少磁盘I/O操作次数: ```java import java.io.BufferedReader; import java.io.FileReader; public static void readFileUsingBufferedReader(String fileName) { BufferedReader bufferedReader = null; try { bufferedReader = new BufferedReader(new FileReader(fileName)); String line; while ((line = bufferedReader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (bufferedReader != null) bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` #### 4. 使用RandomAccessFile随机读取 `RandomAccessFile`类提供了对文件的随机访问,允许程序直接跳转到文件的任何位置进行读写,非常适合于需要频繁随机访问文件的情况: ```java import java.io.RandomAccessFile; public static void readFileUsingRandomAccessFile(String fileName) { RandomAccessFile randomAccessFile = null; try { randomAccessFile = new RandomAccessFile(fileName, "r"); long length = randomAccessFile.length(); for (int i = 0; i < length; i++) { System.out.print((char) randomAccessFile.read()); } } catch (IOException e) { e.printStackTrace(); } finally { if (randomAccessFile != null) { try { randomAccessFile.close(); } catch (IOException e) { e.printStackTrace(); } } } } ``` ### 总结 通过上述介绍,我们了解到Java中读取文件的不同方式及其适用场景。字节流适合二进制文件,而字符流则更适用于文本文件。`BufferedReader`和`RandomAccessFile`提供了更高级的读取功能,能够满足特定场景下的需求。理解和掌握这些读取方法,将有助于我们在实际开发中更加高效地处理文件操作。
一、多种方式读文件内容。
1、按字节读取文件内容
2、按字符读取文件内容
3、按行读取文件内容
4、随机读取文件内容
Java代码
1.import java.io.BufferedReader;
2.import java.io.File;
3.import java.io.FileInputStream;
4.import java.io.FileReader;
5.import java.io.IOException;
6.import java.io.InputStream;
7.import java.io.InputStreamReader;
8.import java.io.RandomAccessFile;
9.import java.io.Reader;
10.
11.public class ReadFromFile {
12. /**
13. * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
14. *
15. * @param fileName
16. * 文件的名
17. */
18. public static void readFileByBytes(String fileName) {
19. File file = new File(fileName);
20. InputStream in = null;
21. try {
23. // 一次读一个字节
24. in = new FileInputStream(file);
25. int tempbyte;
26. while ((tempbyte = in.read()) != -1) {
27. System.out.write(tempbyte);
28. }
29. in.close();
30. } catch (IOException e) {
31. e.printStackTrace();
32. return;
33. }
34. try {
35. System.out.println("以字节为单位读取文件内容,一次读多个字节:");
36. // 一次读多个字节
37. byte[] tempbytes = new byte[100];
38. int byteread = 0;
39. in = new FileInputStream(fileName);
40. ReadFromFile.showAvailableBytes(in);
41. // 读入多个字节到字节数组中,byteread为一次读入的字节数
42. while ((byteread = in.read(tempbytes)) != -1) {
43. System.out.write(tempbytes, 0, byteread);
44. }
45. } catch (Exception e1) {
46. e1.printStackTrace();
47. } finally {
48. if (in != null) {
49. try {
50. in.close();
51. } catch (IOException e1) {
剩余24页未读,继续阅读
- 粉丝: 0
- 资源: 15
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C2000DSP-BootLoader-GUI C#
- 图像分割,训练数据集,train-15【train-11~train-20免积分】
- cc数据库安装包操作系统dll问题解决
- 二手房数据-数据分析练习资源(csv表格)
- 图像分割,训练数据集,train-13【train-11~train-85免积分】
- Unity 山水树木的资源文件
- templatespider-机器人开发资源源代码
- 基于springboot的健身房管理系统(可做毕设参考)+源码+文档+sql.rar
- Spring Cloud电商项目精讲:架构设计与开发技巧课程
- 图像分割,训练数据集,train-11【train-11~train-95免积分】