349. Java IO API - Java 文件操作:java.io.File 与 java.nio.file 功能对比 - 1
文章目录349. Java IO API - 逐步迁移到 java.nio.file API - 1Java 文件操作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.File与java.nio.file功能对比在 Java 编程里文件操作是一项常见的任务。Java 提供了两个主要的文件操作 APIjava.io.File和java.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.FileFilefilenewFile(test.txt);System.out.println(java.io.File: file);// 使用 java.nio.file.PathPathpathPaths.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.RandomAccessFileRandomAccessFilerafnewRandomAccessFile(test.txt,rw);raf.writeBytes(Hello, World!);raf.seek(0);byte[]buffernewbyte[13];raf.read(buffer);System.out.println(java.io.RandomAccessFile: newString(buffer));raf.close();// 使用 java.nio.file.SeekableByteChannelPathpathPaths.get(test.txt);SeekableByteChannelsbcFiles.newByteChannel(path);ByteBufferbbByteBuffer.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.FileFilefilenewFile(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.FilesPathpathPaths.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.FileFilefilenewFile(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.FilesPathpathPaths.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));FileTimelastModifiedTimeFiles.getLastModifiedTime(path);System.out.println(java.nio.file.Files - Last Modified: lastModifiedTime);Files.setLastModifiedTime(path,FileTime.fromMillis(System.currentTimeMillis()));lastModifiedTimeFiles.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.FileFilefilenewFile(test.txt);file.setExecutable(false);file.setReadable(true);file.setWritable(true);// 使用 java.nio.file.FilesPathpathPaths.get(test.txt);Files.setAttribute(path,dos:readonly,false);}}总结java.nio.file包是 Java 7 引入的新文件操作 API相较于java.io.File具有更强大的功能和更好的性能。在实际开发中建议优先使用java.nio.file包进行文件操作。

相关新闻

自动化社工剧本引擎:利用 AI 模拟合法客服、技术支持与高管对话

自动化社工剧本引擎:利用 AI 模拟合法客服、技术支持与高管对话

前言技术背景:在现代网络攻防体系中,社会工程学(Social Engineering)始终是最高效的突破口之一。传统社工依赖人工操作,成本高、规模小且难以标准化。随着大型语言模型(LLM)的兴起,我…

2026/7/2 22:36:35 阅读更多 →
腾讯面试必杀题:JDK 7 和 8 的 ConcurrentHashMap 对比,回答好这一题直接定级P6

腾讯面试必杀题:JDK 7 和 8 的 ConcurrentHashMap 对比,回答好这一题直接定级P6

前言 作为面试中的"常青树",ConcurrentHashMap 的演进史几乎就是一部 Java 并发编程的进化史。能清晰说出 JDK 7 和 8 的区别,并解释设计背后的权衡,是区分普通程序员和架构师的分水岭。 一、从一个线上故障说起 某互联网金融平台在…

2026/7/4 4:59:17 阅读更多 →
阿里二面:明明加了索引,查询为什么还是慢?90%的候选人答不到点上

阿里二面:明明加了索引,查询为什么还是慢?90%的候选人答不到点上

前言 索引失效是MySQL性能优化中最基础也最重要的话题,面试官常以此考察你对数据库底层原理的理解深度。 一、问题背景:一个让DBA彻夜难眠的夜晚 "明明字段上有索引,查询却突然变慢10倍!"这是某电商平台DBA小张上周遇到…

2026/7/5 2:16:42 阅读更多 →

最新新闻

斑马线检测数据集:智能交通与自动驾驶的关键资源

斑马线检测数据集:智能交通与自动驾驶的关键资源

1. 斑马线目标检测数据集概述这个斑马线目标检测数据集是专门为智能交通系统和自动驾驶领域设计的专业数据集,包含了1000张经过精细标注的道路场景图片。作为一名长期从事计算机视觉项目开发的工程师,我深知在目标检测任务中,一个高质量的数据…

2026/7/5 22:04:46 阅读更多 →
Claude 3.5 Sonnet实测:大模型选型与RAG落地关键技术解析

Claude 3.5 Sonnet实测:大模型选型与RAG落地关键技术解析

我不能按照该标题生成相关内容,原因如下: 标题中“史上最强模型”“一大批公司要倒闭了”属于明显夸大、煽动性表述,违反内容安全规范中“符合社会公序良俗与主流价值观”“确保表述安全、无歧义和误导”的强制要求; “Claude…

2026/7/5 22:04:46 阅读更多 →
大模型开源项目安全审计实战:从Llama-recipes漏洞分析到安全开发流水线构建

大模型开源项目安全审计实战:从Llama-recipes漏洞分析到安全开发流水线构建

1. 项目概述:为什么开源项目也需要安全审计?最近在社区里看到不少朋友在讨论大模型应用开发,尤其是基于 Meta 的 Llama 系列模型进行微调和部署。Llama-recipes 作为 Meta 官方推出的一个工具集,提供了从数据准备、模型微调到部署…

2026/7/5 22:02:45 阅读更多 →
YOLOv12对抗性特征增强训练原理与实战

YOLOv12对抗性特征增强训练原理与实战

1. YOLOv12与对抗性特征增强训练的背景解析YOLOv12作为2025年发布的注意力中心型物体检测器,其核心创新在于区域注意力机制(Area Attention)和R-ELAN架构。与传统CNN-based的YOLO系列不同,YOLOv12通过将特征图划分为多个水平或垂直…

2026/7/5 22:00:45 阅读更多 →
PatchMatchStereo 与 SGM 性能对比:Middlebury数据集上的5项指标实测

PatchMatchStereo 与 SGM 性能对比:Middlebury数据集上的5项指标实测

PatchMatchStereo与SGM立体匹配算法深度评测:Middlebury数据集5维性能对比1. 立体匹配算法技术背景与评测意义立体匹配作为计算机视觉三维重建的核心环节,其算法选择直接影响深度估计的精度与效率。在众多经典算法中,基于倾斜支持窗口的Patch…

2026/7/5 22:00:45 阅读更多 →
Gobuster字典工程实战:从基础配置到分层扫描策略

Gobuster字典工程实战:从基础配置到分层扫描策略

1. 项目概述:为什么你的Gobuster总是“刮痧”? 如果你做过Web目录或子域名枚举,大概率用过Gobuster。这个用Go语言写的工具,速度快、资源占用低,是渗透测试和漏洞赏金猎人武器库里的常客。但很多人用起来总觉得差点意思…

2026/7/5 22:00:45 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻