Java IO 必知必会:File 类与字节流实战

发布时间:2026/6/8 14:06:52

Java IO 必知必会:File 类与字节流实战 一、File 类 —— 文件路径与属性操作File不读写内容只负责路径表示和文件/目录管理。创建与常用方法File file new File(data.txt); File dir new File(C:/test); // 最常用的方法 file.exists(); // 是否存在 file.isFile(); // 是否为文件 file.isDirectory(); // 是否为目录 file.getName(); // 文件名 file.getAbsolutePath(); // 绝对路径 file.length(); // 文件大小字节 file.createNewFile(); // 创建文件 file.mkdirs(); // 递归创建目录 file.delete(); // 删除 file.listFiles(); // 列出目录内容遍历目录示例File dir new File(.); File[] files dir.listFiles(); for (File f : files) { System.out.println((f.isDirectory() ? [DIR] : [FILE] ) f.getName()); }二、InputStream —— 读字节核心方法int read() // 读一个字节返回 0~255结尾返回 -1 int read(byte[] b) // 读一批字节到数组返回实际读取长度 void close()正确写法带缓冲推荐try (FileInputStream fis new FileInputStream(data.txt)) { byte[] buf new byte[1024]; int len; while ((len fis.read(buf)) ! -1) { System.out.write(buf, 0, len); // 不要用 println会乱码 } }三、OutputStream —— 写字节核心方法void write(int b) // 写一个字节低8位 void write(byte[] b) // 写整个数组 void write(byte[] b, int off, int len) // 写数组的指定部分覆盖写入 vs 追加写入// 覆盖写入默认 try (FileOutputStream fos new FileOutputStream(out.txt)) { fos.write(Hello.getBytes()); } // 追加写入第二个参数传 true try (FileOutputStream fos new FileOutputStream(out.txt, true)) { fos.write(World.getBytes()); }四、Buffered 流 —— 性能关键直接读写大文件很慢加 Buffered 包装可提升 10x 以上性能五、文件拷贝完整代码把前面所有知识点串起来这是最实用的代码public static void copy(String src, String dst) throws IOException { try (InputStream in new BufferedInputStream(new FileInputStream(src)); OutputStream out new BufferedOutputStream(new FileOutputStream(dst))) { byte[] buf new byte[8192]; int len; while ((len in.read(buf)) ! -1) { out.write(buf, 0, len); } } }六、try-with-resources 一句话解释把new XXX()写在try()括号里Java 自动帮你关流不用手写finally。// ✅ 推荐自动关流 try (FileInputStream fis new FileInputStream(a.txt)) { // 使用 fis } // ❌ 不推荐手动关流代码冗长且容易漏 FileInputStream fis null; try { fis new FileInputStream(a.txt); } finally { if (fis ! null) fis.close(); }七、核心要点速记要点说明File不读写只管路径、属性、目录操作用try-with-resources自动关流标准写法用Buffered包装大文件必备性能提升显著追加模式new FileOutputStream(path, true)文本编码用getBytes(UTF-8)明确指定如有疑问欢迎留言交流

相关新闻