毕节市城乡建设局网站建立企业官网
2026/4/18 19:19:39 网站建设 项目流程
毕节市城乡建设局网站,建立企业官网,济南简单的网站制作,免费浏览的不良网站作为Java程序员#xff0c;不管是读写文件、处理网络数据#xff0c;还是操作控制台输入输出#xff0c;IO 都是绕不开的坎。刚学的时候#xff0c;看着 InputStream、OutputStream、Reader、Writer 一堆类#xff0c;属实有点头大。今天就用大白话#xff0c;把Java IO的…作为Java程序员不管是读写文件、处理网络数据还是操作控制台输入输出IO 都是绕不开的坎。刚学的时候看着 InputStream、OutputStream、Reader、Writer 一堆类属实有点头大。今天就用大白话把Java IO的核心知识点捋清楚新手也能轻松看懂一、先搞懂Java IO到底是啥IO全称 Input/Output翻译过来就是输入和输出。说白了就是程序和外部设备之间的数据传输。比如你用Java程序读取本地的txt文件这就是输入Input —— 数据从文件进到程序里你把程序里的用户信息写入到数据库或者保存成一个新文件这就是输出Output —— 数据从程序跑到外部存储里。Java把这些IO操作都封装在了 java.io 包下后来又出了 java.nio NIO是Non-blocking IO非阻塞IO今天先聊传统IO。核心思路就是用流的方式处理数据这“流”就像水管数据就是水管里的水顺着水管就能从一端流到另一端。二、核心分类字节流 vs 字符流Java IO最核心的划分就是字节流和字符流。这俩的区别直接决定了你该用哪个类干活。2.1 字节流处理一切数据的“万能选手”字节流的操作单位是 字节byte1个字节等于8位。不管是文本文件、图片、音频、视频本质上都是字节组成的所以字节流能处理任何类型的数据。字节流的顶级父类是两个抽象类- InputStream所有字节输入流的爹负责读数据- OutputStream所有字节输出流的爹负责写数据我们常用的是它们的子类比如操作文件的 FileInputStream 和 FileOutputStream。举个简单的例子用字节流复制一张图片javaimport java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class ByteStreamDemo {public static void main(String[] args) {// 源文件路径和目标文件路径String srcPath D:/test.jpg;String destPath D:/test_copy.jpg;// 声明流对象FileInputStream fis null;FileOutputStream fos null;try {// 创建流对象fis new FileInputStream(srcPath);fos new FileOutputStream(destPath);// 定义缓冲区每次读1024字节提高效率byte[] buffer new byte[1024];int len; // 记录每次实际读取的字节数// 循环读取读到末尾时fis.read()会返回-1while ((len fis.read(buffer)) ! -1) {// 把读到的字节写入目标文件fos.write(buffer, 0, len);}System.out.println(图片复制成功);} catch (IOException e) {e.printStackTrace();} finally {// 关闭流释放资源顺序是先开后关try {if (fos ! null) fos.close();if (fis ! null) fis.close();} catch (IOException e) {e.printStackTrace();}}}}这里要注意两个点一是一定要用 finally 关闭流不然会浪费系统资源二是用字节数组当缓冲区比一次读一个字节快太多了2.2 字符流处理文本的“专业选手”字符流的操作单位是 字符char它是为了处理文本数据而生的。因为不同的编码格式比如UTF-8、GBK一个字符对应的字节数不一样字符流会帮我们自动处理编码问题避免出现乱码。字符流的顶级父类也是两个抽象类- Reader所有字符输入流的爹负责读文本- Writer所有字符输出流的爹负责写文本常用子类比如 FileReader 和 FileWriter直接用来读写文本文件超方便。同样举个例子用字符流读取txt文件内容javaimport java.io.FileReader;import java.io.IOException;public class CharStreamDemo {public static void main(String[] args) {String filePath D:/test.txt;FileReader fr null;try {fr new FileReader(filePath);char[] buffer new char[1024];int len;while ((len fr.read(buffer)) ! -1) {// 把字符数组转成字符串输出System.out.print(new String(buffer, 0, len));}} catch (IOException e) {e.printStackTrace();} finally {try {if (fr ! null) fr.close();} catch (IOException e) {e.printStackTrace();}}}}这里要注意字符流不能处理图片、音频等二进制文件强行用的话文件会损坏三、进阶技巧缓冲流让IO速度飞起来刚才的例子里我们自己定义了字节数组/字符数组当缓冲区但Java其实给我们提供了更方便的缓冲流它的底层就是自带了缓冲区能大大减少磁盘的读写次数提升效率。缓冲流分为字节缓冲流和字符缓冲流- 字节缓冲流 BufferedInputStream 、 BufferedOutputStream- 字符缓冲流 BufferedReader 、 BufferedWriter尤其是字符缓冲流还提供了 readLine() 按行读和 newLine() 换行方法处理文本简直不要太爽举个字符缓冲流的例子按行读取文本并写入新文件javaimport java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class BufferedStreamDemo {public static void main(String[] args) {String srcPath D:/source.txt;String destPath D:/dest.txt;BufferedReader br null;BufferedWriter bw null;try {br new BufferedReader(new FileReader(srcPath));bw new BufferedWriter(new FileWriter(destPath));String line;// 按行读取读到末尾返回nullwhile ((line br.readLine()) ! null) {bw.write(line);bw.newLine(); // 写入换行符不然所有内容会挤在一行}System.out.println(文本复制完成);} catch (IOException e) {e.printStackTrace();} finally {try {if (bw ! null) bw.close();if (br ! null) br.close();} catch (IOException e) {e.printStackTrace();}}}}四、必踩的坑这些注意事项要记牢1. 流一定要关闭不管是手动关还是用try-with-resources语法JDK7及以上支持不关闭流会导致资源泄漏。try-with-resources会自动关闭流推荐使用java// try-with-resources语法流对象写在try的括号里try (FileInputStream fis new FileInputStream(test.jpg);FileOutputStream fos new FileOutputStream(test_copy.jpg)) {// 读写操作} catch (IOException e) {e.printStackTrace();}2. 区分绝对路径和相对路径绝对路径是从盘符开始的完整路径比如D:/test.txt相对路径是相对于项目根目录的路径比如src/test.txt别搞混了导致文件找不到。3. 处理编码问题如果用字符流读写出现乱码可以指定编码格式比如用 InputStreamReader 包装字节流javaBufferedReader br new BufferedReader(new InputStreamReader(new FileInputStream(test.txt), UTF-8));4. 字节流和字符流别混用比如用FileOutputStream写文本再用FileReader读很容易出现乱码。五、总结Java IO其实没那么复杂记住核心逻辑就行- 按数据类型分字节流处理一切数据字符流专门处理文本- 按功能分节点流直接操作文件/设备比如FileInputStream和处理流包装节点流比如BufferedInputStream提升性能- 关键操作打开流→读写数据→关闭流掌握这些基础再去学NIO、NIO2就会轻松很多。希望这篇文章能帮到正在啃Java IO的小伙伴们祝大家编程愉快

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询