# 1. Files.copy 与 Files.move 的原子性 A move 在任何情况下都是原子的 B move 在同一文件系统基于 rename 是原子的,跨文件系统退化为复制+删除非原子;copy 默认非原子 ✓ 正确答案 C copy 默认是原子的 D ATOMIC_MOVE 在底层不支持时会被忽略
# 2. FileLock 文件锁,tryLock 非阻塞与重叠检测、跨进程互斥与 JVM 内锁的差异,进程崩溃后锁的释放 A tryLock 会阻塞等待,直到获得锁 B 文件锁与 JVM 内锁完全等价 C 进程崩溃后锁不会释放 D tryLock 非阻塞、文件锁用于跨进程互斥(区别于 JVM 内锁),进程崩溃后操作系统自动释放锁 ✓ 正确答案
# 3. FileSystems 与 in-memory 文件系统(Jimfs) A FileSystems.newFileSystem 可创建自定义文件系统,Jimfs 提供内存文件系统用于测试与隔离 ✓ 正确答案 B FileSystems 只能获取默认文件系统 C 内存文件系统需要落盘 D Jimfs 是操作系统文件系统
# 4. FileSystems 与自定义文件系统 A 自定义文件系统必须修改 JDK 源码 B FileSystems.newFileSystem 配合 FileSystemProvider SPI 可创建 zip/内存/远程等自定义文件系统 ✓ 正确答案 C FileSystemProvider 不是 SPI 机制 D 只能创建默认文件系统
# 5. Files.createTempFile 的临时文件清理 A 临时文件会自动删除 B 临时文件无法手动删除 C 临时文件删除后 JVM 必须重启 D 临时文件不会自动删除,需主动 deleteIfExists 或 deleteOnExit 清理,避免残留 ✓ 正确答案
# 6. Files.deleteIfExists 与删除语义 A deleteIfExists 不存在也会抛异常 B delete 可以删除非空目录 C delete 不存在抛 NoSuchFileException,deleteIfExists 不存在返回 false,两者都只能删空目录 ✓ 正确答案 D 两者语义完全相同
# 7. Files.getPosixFilePermissions 与权限位 A 权限位只有读写两种 B POSIX 权限位是 rwx 三组(所有者/组/其他)共 9 位,get/set 方法仅 Unix 文件系统支持 ✓ 正确答案 C 权限无法修改 D Windows 上同样支持 POSIX 权限
# 8. Files.isSameFile 与符号链接 A isSameFile 比较实际文件(解析符号链接),比 equals 的路径字符串比较更准确 ✓ 正确答案 B isSameFile 只比较路径字符串 C isSameFile 不解析符号链接 D isSameFile 与 equals 完全等价
# 9. Files.readAllBytes vs Files.lines 的内存代价 A readAllBytes 一次性读入内存适合小文件,lines 流式逐行适合大文件并需关闭释放句柄 ✓ 正确答案 B lines 会一次性读入全部内存 C readAllBytes 适合大文件 D 两者内存代价相同
# 10. Files.readAttributes 与文件元数据 A readAttributes 只能读取文件大小 B readAttributes 读取元数据,属性视图有 Basic/Dos/Posix,支持按名称读取单个属性 ✓ 正确答案 C 元数据只有 Basic 一种视图 D readAttributes 无法读取文件时间
# 11. Files.walk/Files.find 的 Stream API 集成在大目录遍历中的注意事项 A Stream 无需关闭 B walk 会一次性遍历全部 C 返回的 Stream 需 try-with-resources 关闭避免 fd 泄漏,注意惰性遍历、深度限制与异常处理 ✓ 正确答案 D find 无法匹配文件
# 12. Files.walk/Files.list 的流式遍历 A walk 只列出一层 B walk 与 list 完全相同 C list 会递归遍历 D walk 递归遍历目录树,list 只列出单层子项,两者都返回需关闭的 Stream ✓ 正确答案
# 13. Files.walkFileTree 的递归控制 A walkFileTree 用 FileVisitor 回调(preVisitDirectory 等)精细控制递归,walk 用 Stream+maxDepth 声明式 ✓ 正确答案 B walkFileTree 无法控制递归 C walkFileTree 与 walk 完全等价 D walkFileTree 返回 Stream
# 14. Files/Paths 工具类的常用操作 A Paths.get 创建路径,Files 提供创建/判断/读写/复制/删除/属性/遍历等大量操作 ✓ 正确答案 B Paths 提供所有文件操作 C Files 只能创建文件 D Files 无法读取文件内容
# 15. FileChannel.force 与持久化,write 只进操作系统缓存、force 才落盘,与流式输出 flush 的语义差异 A flush 与 force 都保证落盘 B write 只进页缓存,force 相当于 fsync 落盘;flush 只把数据排到内核,不保证落盘 ✓ 正确答案 C force 只是刷新 JVM 缓冲 D write 立即落盘
# 16. AsynchronousFileChannel 异步读写,CompletionHandler 与 Future 两种接口、线程池关联及适用场景 A 无需线程池即可异步 B 只能使用阻塞式读写 C Future 方式是事件驱动的 D 支持 CompletionHandler 回调与 Future 两种结果获取方式,需关联线程池执行回调 ✓ 正确答案
# 17. RandomAccessFile 与 FileChannel 的随机访问,position 定位、读改写场景的取舍与并发差异 A RandomAccessFile 支持内存映射 B 两者都支持 position 定位随机访问,FileChannel 支持 mmap/transferTo 更强大,两者并发访问需注意 position 竞争 ✓ 正确答案 C FileChannel 不支持定位 D 两者并发安全完全相同
# 18. WatchService(JDK 7+)在文件系统变更监控中的事件类型与注册机制 A WatchService 监控单个文件 B WatchService 监控目录,事件有 CREATE/DELETE/MODIFY/OVERFLOW,通过 register 注册目录 ✓ 正确答案 C 事件类型只有 CREATE D OVERFLOW 表示监控成功
# 19. sendfile/splice 系统调用与 Java A sendfile 用于文件与 socket 间零拷贝,Java 通过 transferTo 利用它,splice 无直接 Java API ✓ 正确答案 B splice 是 Java 标准 API C sendfile 需要用户态拷贝 D Java 不能使用 sendfile
# 20. JDK 25 中 Path 的符号链接(Symbolic Link)解析与 LinkOption.NOFOLLOW_LINKS 的安全语义 A 所有操作默认都不跟随链接 B NOFOLLOW_LINKS 会解析链接到目标 C NOFOLLOW_LINKS 不跟随符号链接、操作链接本身,安全场景使用可防止 symlink attack ✓ 正确答案 D 符号链接无法被删除
# 21. ZipFileSystem,通过 FileSystems.newFileSystem 把 zip/jar 挂载为文件系统,与解压读写的应用场景 A ZipFileSystem 只能用于解压到磁盘 B ZipFileSystem 将 zip/jar 挂载为文件系统,用统一 Path/Files API 操作,避免显式解压 ✓ 正确答案 C 挂载 zip 后无法读取内容 D ZipFileSystem 与普通文件系统无关