当前位置: 首页 > news >正文

349. Java IO API - Java 文件操作:java.io.File 与 java.nio.file 功能对比 - 1

文章目录

  • 349. Java IO API - 逐步迁移到 `java.nio.file` API - 1
      • Java 文件操作:`java.io.File` 与 `java.nio.file` 功能对比
        • 1. 路径表示
        • 2. 随机访问文件
        • 3. 文件权限检查
        • 4. 文件元数据管理
        • 5. 设置文件属性
      • 总结

349. Java IO API - 逐步迁移到java.nio.fileAPI - 1

如果望充分利用java.nio.file包提供的强大功能,可以通过File.toPath()方法将旧代码逐步迁移到新的Path接口。但如果不想使用这种方法,或者需要对文件 I/O 代码进行重写,将不得不重构代码以完全使用新的PathAPI。

Java 文件操作:java.io.Filejava.nio.file功能对比

在 Java 编程里,文件操作是一项常见的任务。Java 提供了两个主要的文件操作 API:java.io.Filejava.nio.file。前者是 Java 早期就有的 API,而后者是 Java 7 引入的新 API,具备更强大的功能和更好的性能。接下来,我们会对这两个 API 的功能进行对比,同时给出示例代码辅助理解。

1. 路径表示
  • java.io.File:使用java.io.File类来表示文件或目录的路径。
  • java.nio.file.Path:使用java.nio.file.Path接口来表示文件或目录的路径,它更为灵活和强大。

示例代码

importjava.io.File;importjava.nio.file.Path;importjava.nio.file.Paths;publicclassPathExample{publicstaticvoidmain(String[]args){// 使用 java.io.FileFilefile=newFile("test.txt");System.out.println("java.io.File: "+file);// 使用 java.nio.file.PathPathpath=Paths.get("test.txt");System.out.println("java.nio.file.Path: "+path);}}
2. 随机访问文件
  • java.io.RandomAccessFile:可以随机访问文件的内容。
  • java.nio.file.SeekableByteChanneljava.nio.file包中的SeekableByteChannel接口也能实现随机访问文件的功能。

示例代码

importjava.io.IOException;importjava.io.RandomAccessFile;importjava.nio.ByteBuffer;importjava.nio.channels.SeekableByteChannel;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;publicclassRandomAccessExample{publicstaticvoidmain(String[]args)throwsIOException{// 使用 java.io.RandomAccessFileRandomAccessFileraf=newRandomAccessFile("test.txt","rw");raf.writeBytes("Hello, World!");raf.seek(0);byte[]buffer=newbyte[13];raf.read(buffer);System.out.println("java.io.RandomAccessFile: "+newString(buffer));raf.close();// 使用 java.nio.file.SeekableByteChannelPathpath=Paths.get("test.txt");SeekableByteChannelsbc=Files.newByteChannel(path);ByteBufferbb=ByteBuffer.allocate(13);sbc.read(bb);bb.flip();System.out.println("java.nio.file.SeekableByteChannel: "+newString(bb.array()));sbc.close();}}
3. 文件权限检查
  • java.io.File:使用File.canRead()File.canWrite()File.canExecute()方法来检查文件的读写执行权限。
  • java.nio.file.Files:使用Files.isReadable()Files.isWritable()Files.isExecutable()方法来检查文件的读写执行权限。在 UNIX 文件系统中,还能借助Managing Metadata (File and File Store Attributes)包检查九种文件权限。

示例代码

importjava.io.File;importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;publicclassPermissionExample{publicstaticvoidmain(String[]args)throwsIOException{// 使用 java.io.FileFilefile=newFile("test.txt");System.out.println("java.io.File - Readable: "+file.canRead());System.out.println("java.io.File - Writable: "+file.canWrite());System.out.println("java.io.File - Executable: "+file.canExecute());// 使用 java.nio.file.FilesPathpath=Paths.get("test.txt");System.out.println("java.nio.file.Files - Readable: "+Files.isReadable(path));System.out.println("java.nio.file.Files - Writable: "+Files.isWritable(path));System.out.println("java.nio.file.Files - Executable: "+Files.isExecutable(path));}}
4. 文件元数据管理
  • java.io.File:使用File.isDirectory()File.isFile()File.length()File.lastModified()File.setLastModified(long)等方法来管理文件的元数据。
  • java.nio.file.Files:使用Files.isDirectory(Path, LinkOption...)Files.isRegularFile(Path, LinkOption...)Files.size(Path)Files.getLastModifiedTime(Path, LinkOption...)Files.setLastModifiedTime(Path, FileTime)等方法来管理文件的元数据。

示例代码

importjava.io.File;importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.nio.file.attribute.FileTime;importjava.util.Date;publicclassMetadataExample{publicstaticvoidmain(String[]args)throwsIOException{// 使用 java.io.FileFilefile=newFile("test.txt");System.out.println("java.io.File - Is Directory: "+file.isDirectory());System.out.println("java.io.File - Is File: "+file.isFile());System.out.println("java.io.File - Length: "+file.length());System.out.println("java.io.File - Last Modified: "+newDate(file.lastModified()));file.setLastModified(System.currentTimeMillis());System.out.println("java.io.File - New Last Modified: "+newDate(file.lastModified()));// 使用 java.nio.file.FilesPathpath=Paths.get("test.txt");System.out.println("java.nio.file.Files - Is Directory: "+Files.isDirectory(path));System.out.println("java.nio.file.Files - Is Regular File: "+Files.isRegularFile(path));System.out.println("java.nio.file.Files - Size: "+Files.size(path));FileTimelastModifiedTime=Files.getLastModifiedTime(path);System.out.println("java.nio.file.Files - Last Modified: "+lastModifiedTime);Files.setLastModifiedTime(path,FileTime.fromMillis(System.currentTimeMillis()));lastModifiedTime=Files.getLastModifiedTime(path);System.out.println("java.nio.file.Files - New Last Modified: "+lastModifiedTime);}}
5. 设置文件属性
  • java.io.File:使用setExecutable()setReadable()setReadOnly()setWritable()等方法来设置文件的属性。
  • java.nio.file.Files:使用Files.setAttribute(Path, String, Object, LinkOption...)方法来设置文件的属性。

示例代码

importjava.io.File;importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;publicclassAttributeExample{publicstaticvoidmain(String[]args)throwsIOException{// 使用 java.io.FileFilefile=newFile("test.txt");file.setExecutable(false);file.setReadable(true);file.setWritable(true);// 使用 java.nio.file.FilesPathpath=Paths.get("test.txt");Files.setAttribute(path,"dos:readonly",false);}}

总结

java.nio.file包是 Java 7 引入的新文件操作 API,相较于java.io.File具有更强大的功能和更好的性能。在实际开发中,建议优先使用java.nio.file包进行文件操作。

http://www.jsqmd.com/news/465799/

相关文章:

  • 《Mybatis》第11章 总结与展望
  • [STM32WBA] 【NUCLEO-WBA65RI 测评】+Android端进行蓝牙OTA升级
  • LLM时代的攻防利刃:从入门到精通高仿真钓鱼内容生成
  • es6.8快照备份恢复到es7.17
  • Python基于flask+uniapp微信小程序的同城钓鱼垂钓社交的论坛交流设计与开发
  • 一文读懂软件著作权(软著):从保护到申请,全方位指南!
  • 自动化社工剧本引擎:利用 AI 模拟合法客服、技术支持与高管对话
  • 数据、算法、场景:拆解营销智能体的“三重内核”
  • 计算机毕业设计java基于web的仓库货物管理系统 基于B/S架构的仓储库存信息化管理系统 面向多角色的仓库物资进销存管理平台
  • 2026四川移动洗车槽出租、沉淀池租赁、拉森铺路钢板出租公司推荐,蜀鑫诚800+项目验证能力 - 深度智识库
  • 毕设程序java博物馆预约管理系统 基于SpringBoot的文博场馆智能票务预约平台 文化遗产数字化参观预约服务平台
  • 计算机毕业设计java基于vue与spring的药品销售管理系统设计与实现 基于VUE+SpringBoot的医药商品进销存管理系统 面向连锁药店的VUE与Spring框架药品流通管理平台
  • 网站php think run 启动成功,但网站无法访问错误怎么办|已解决
  • 计算机毕业设计java基于webFaceBox社交圈子 基于微信小程序的校园社交与闲置交易平台 FaceBox校园社交圈子小程序设计与实现
  • 分享一个学习类智能体的人设 - -星语
  • 毕设程序java博主网上招聘系统 自媒体人才供需对接平台 网红博主在线求职与品牌合作系统
  • 博客课后作业要求
  • 毕设程序java博雅养老院管理系统 基于SpringBoot的养老机构数字化运营系统 面向现代化养老院的Java Web信息化管理平台
  • 阿里二面:明明加了索引,查询为什么还是慢?90%的候选人答不到点上
  • 面试官:大模型是怎么调用工具的呢 ?
  • 网站部署后提示“Class think\App not found”错误怎么办|已解决
  • 面字节差点挂在这道Redis锁上:为什么 setnx 不能直接做分布式锁?
  • C# 中值类型和引用类型的主要区别是什么
  • oracle 26ai 创建的默认表空间竟然是big - a
  • FOC滑膜观测器(SMO+PLL)Matlab 2021b模型实现:零速闭环启动与硬件开环启动...
  • 网站生成页面空白/中断排查|已解决
  • 线程、进程、协程的区别是什么?
  • MySQL面试必问:存储用户密码,char还是varchar?答案出乎意料!
  • 腾讯面试必杀题:JDK 7 和 8 的 ConcurrentHashMap 对比,回答好这一题直接定级P6
  • 基于AI驱动 传声港成为国内主流软文营销平台标杆 - 博客湾