Java 文件操作与 IO 流入门指南
在 Java 开发中文件操作与 IO 流是处理数据持久化、数据交互的核心能力。本文将结合代码实例与核心概念带你系统梳理 Java 文件 IO 的基础用法与设计思想。一、核心前置认知输入输出的本质在文件 IO 体系中输入与输出的定义需围绕程序内存 为核心展开输入Input数据从外部文件流向程序对应从文件读数据输出Output数据从程序流向外部文件对应往文件写数据。判断是输入还是输出要看数据的流向我们可以站在cpu的视角迎面而来的就是输入离我们远去的就是输出。所以如果是流向是从硬盘到CPU的操作这就是输入如果是从CPU到硬盘这就是输出。本次学习的字节流读取正是输入操作的核心实现方式通过InputStream类完成文件数据的逐字节或批量读取。二、IO 流的核心设计字节流与字符流Java IO 流的设计遵循装饰器模式按数据单位分为字节流和字符流按流向分为输入流和输出流。1. 字节流InputStream/OutputStream数据单位字节适用于二进制文件图片、音频、视频等核心方法read()读取一个字节返回 0-255读到末尾返回 -1read(byte[] b)读取字节数组返回实际读取长度write(int b)写入一个字节write(byte[] b, int off, int len)写入字节数组的指定部分典型实现FileInputStream/FileOutputStreampublic static void main(String[] args) throws IOException { // InputStream inputStreamnull; // try { // //这个操作相当于是打开了这个文件 // inputStreamnew FileInputStream(./test.txt); // } finally { // inputStream.close(); // } // 由于需要确保关闭文件能够执行到所以需要把12行的这个代码用finally包裹起来 //下面这种写法更加简洁只要出了try这个代码块就会自动调用close方法对文件进行关闭 try (InputStream inputStream new FileInputStream(./test.txt)) { // 读文件操作. while (true) { // 一次读一个字节 // int data inputStream.read(); // if (data -1) { // // 文件读完. // break; // } // System.out.printf(0x%x\n, data); // 一次读多个字节, 数组的长度, 自行定义. byte[] data new byte[3]; // 读操作, 就会尽可能把字节数组给填满. // 填不满的话, 能填几个就是几个 // 此处的 n 就表示实际读了几个字节. // 这个方法使用参数作为方法的返回值一开始data是一个空数组当把他传入到这个方法之后data就变成有用的数据了 int n inputStream.read(data); System.out.println(n n); if (n -1) { // 文件读完. break; } for (int i 0; i n; i) { System.out.printf(0x%x\n, data[i]); } System.out.println(); } } }public static void main(String[] args) { try(OutputStream outputStreamnew FileOutputStream(./output.txt,true)){ //下面这种方式是一次只写一个 //如果当前文件不存在会去创建这个文件 // outputStream.write(97); // outputStream.write(98); // outputStream.write(99); //这种方式是一次写多个数据 //默认会把之前的数据清空然后再写入新的数据 //如果把append设置为true新写入的数据就直接追加到原来的内容的后面了 byte[] bytes{99,97}; outputStream.write(bytes); } catch (IOException e) { throw new RuntimeException(e); } }2. 字符流Reader/Writer数据单位字符适用于文本文件.txt、.java 等自动转码底层会根据文件编码如 UTF-8将字节转为字符避免乱码核心方法read()读取一个字符返回 Unicode 码值末尾返回 -1read(char[] cbuf)读取字符数组write(String str)直接写入字符串典型实现FileReader/FileWriterpublic static void main(String[] args) { try(Reader readernew FileReader(./test.txt)){ while (true){ // int creader.read(); // if(c-1){ // break; // } // System.out.println((char) c); char[] charsnew char[1024]; int nreader.read(chars); if(n-1){ break; } for (int i 0; i n; i) { System.out.println(chars[i]); } } } catch (IOException e) { throw new RuntimeException(e); } }public static void main(String[] args) { try(Writer writernew FileWriter(./output.txt,true)){ writer.write(Hello World); }catch (IOException e){ throw new RuntimeException(e); } }3. 流对象的使用流程打开流创建流对象关联目标文件读写数据调用read()/write()方法处理数据关闭流必须手动关闭流以释放系统资源推荐使用try-with-resources语法自动关闭。三、结语文件 IO 是后端开发的基础能力从简单的日志记录到复杂的二进制文件解析都离不开这些核心 API。理解字节流与字符流的设计差异、掌握try-with-resources资源管理、善用缓冲区优化性能是写出高效、健壮文件操作代码的关键。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2419455.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!