根据提供的文件标题、描述、标签以及部分内容,我们可以总结并扩展出与Java文件操作相关的知识点。 ### Java文件操作 #### 概述 Java 提供了多种方法来读取和写入文件,这些方法主要通过 `java.io` 包中的类实现。在给定的部分代码示例中,展示了如何通过字节、字符以及行来读取文件。 #### 1. 通过字节读取文件 通过字节读取文件是处理二进制文件或不需要关心字符编码的情况下的首选方法。这种方式适用于任何类型的文件,包括文本文件和二进制文件。 ##### 方法一:逐字节读取 ```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(); } } ``` ##### 方法二:一次性读取多个字节 这种方法更高效,因为它减少了 I/O 操作次数。 ```java try { System.out.println("按字节读取文件,一次读多个字节:"); byte[] tempBytes = new byte[100]; int byteRead = 0; in = new FileInputStream(fileName); // 显示当前可读的字节数 ReadFromFile.showAvailableBytes(in); while ((byteRead = in.read(tempBytes)) != -1) { System.out.write(tempBytes, 0, byteRead); } } catch (Exception e1) { e1.printStackTrace(); } ``` #### 2. 通过字符读取文件 当处理文本文件时,通常更倾向于使用字符流。这样可以简化编码问题,并且更易于处理文本数据。 ##### 方法一:逐字符读取 ```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) { if (((char) tempChar) != '\r') { // 排除回车符 System.out.print((char) tempChar); } } reader.close(); } catch (Exception e) { e.printStackTrace(); } } ``` ##### 方法二:一次性读取多个字符 这种方法同样可以提高效率。 ```java try { System.out.println("按字符读取文件,一次读多个字符:"); char[] tempChars = new char[30]; int charRead = 0; reader = new InputStreamReader(new FileInputStream(fileName)); while ((charRead = reader.read(tempChars)) != -1) { for (int i = 0; i < charRead; i++) { if (tempChars[i] == '\r') { // 排除回车符 continue; } else { System.out.print(tempChars[i]); } } } } catch (Exception e1) { e1.printStackTrace(); } ``` #### 3. 通过行读取文件 如果需要处理文本文件并且希望每次只读取一行,则可以使用 `BufferedReader` 类。 ```java public static void readFileByLines(String fileName) { File file = new File(fileName); BufferedReader reader = null; try { System.out.println("按行读取文件,一次读一行:"); reader = new BufferedReader(new FileReader(file)); String tempString = null; int line = 1; while ((tempString = reader.readLine()) != null) { System.out.println("第 " + line + " 行:" + tempString); line++; } } catch (IOException e) { e.printStackTrace(); } } ``` #### 总结 以上介绍了三种常见的读取文件的方式:通过字节、字符和行。每种方式都有其适用场景,选择合适的方法取决于具体的应用需求。例如,处理文本文件时通常推荐使用字符流,而处理二进制文件则更适合使用字节流。此外,还应确保在完成文件读取后正确关闭所有打开的流,以释放系统资源,避免内存泄漏等问题。
public class ReadFromFile {
/**
* 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
*/
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();
return;
}
try {
System.out.println("以字节为单位读取文件内容,一次读多个字节:");
// 一次读多个字节
byte[] tempbytes = new byte[100];
int byteread = 0;
in = new FileInputStream(fileName);
ReadFromFile.showAvailableBytes(in);
// 读入多个字节到字节数组中,byteread为一次读入的字节数
while ((byteread = in.read(tempbytes)) != -1) {
}
} catch (Exception e1) {
e1.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e1) {
}
}
}
}
/**
* 以字符为单位读取文件,常用于读文本,数字等类型的文件
*/
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下,\r\n这两个字符在一起时,表示一个换行。
// 但如果这两个字符分开显示时,会换两次行。
// 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
if (((char) tempchar) != '\r') {
剩余8页未读,继续阅读
- 粉丝: 1
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 技术资料分享ATK-NEO-6M用户手册-V1.0很好的技术资料.zip
- 使用 Go + Vue 3 + Vite + TailwindCSS + PostgreSQL + Redis 开发的 Twitter Clone.zip
- vue2 播放海康视频ws://ip:端口/play/JV0124102/fe8bfad5-3b48-4965-98d9-4fbb168898eb.flv
- TYPO3 Docker Boilerplate 项目(NGINX、Apache HTTPd、PHP-FPM、MySQL、Solr、Elasticsearch、Redis、FTP).zip
- Agents-Flex: 一个基于 Java 的 LLM(大语言模型)应用开发框架
- 技术资料分享ATK-NEO-6M GPS模块使用说明-AN1303很好的技术资料.zip
- 安全防护设备检测53-YOLO(v5至v9)、COCO、CreateML、Darknet、VOC数据集合集.rar
- 技术资料分享ATK-HC05蓝牙串口模块使用说明-AN1301很好的技术资料.zip
- 全国296个地级市平均房价数据2000-2022年.zip
- Agency.rp元件资源库