Files.write()写入字节数组需传Path对象,自动创建/清空文件但不建父目录,须预调Files.createDirectories();默认覆盖,追加需显式指定APPEND;大文件易OOM,应分块写。
Files.write() 写入
字节
数组的基本用法
可以直接用
把
一次性写入文件,无需手动打开流或 flush —— 这是它最常用也最安全的场景之一。
核心调用形式只有一行:
。它默认使用
,即:文件不存在就创建,存在就清空重写。
必须传入
对象,不能是
路径字符串(否则编译不通过)
为空数组(
)也会成功写入空文件
若目标目录不存在,会抛出
,不会自动创建父目录
写入前必须确保父目录存在
这是生产环境最容易翻车的地方:
不处理路径中的中间目录,哪怕只差一级,也会直接失败。
正确做法是提前调用
:
立即学习
“
Java免费学习笔记(深入)
”;
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
下载
是幂等的,重复调用无副作用
不要用
(少了个 s),它不递归,遇到多级缺失路径会报错
如果父目录权限不足,异常是
,不是
的模糊提示
覆盖、追加与权限控制的区别
默认行为是覆盖写入;要追加就得显式传参,且追加时不能带
—— 否则逻辑自相矛盾。
追加写入:
写入时设只读权限(Linux/macOS 有效):
Windows 下
无效,会静默忽略;要用
配合
如果指定了
但没配
或
,文件不存在时直接抛
大文件写入时的隐含风险
底层仍会把整个
加载进内存,再一次性刷盘。它不流式处理,所以别拿它写几百 MB 的数组。
写入 500MB 字节数组 → JVM 堆里至少临时多出 500MB 对象,容易触发 GC 甚至
没有进度反馈、无法中断,出错时只能重来
真正的大文件应改用
+
分块写
如果
来自
,注意后者在 JDK 9+ 才有,且同样吃内存
父目录是否存在、字节数组是否真有必要全量加载进内存——这两个点,比语法本身更常决定成败。
Files.write()byte[]Files.write(path, bytes)StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTINGPathStringbytesnew byte[0]NoSuchFileExceptionFiles.write()Files.createDirectories()Path path = Paths.get("logs/app/data.bin");
Files.createDirectories(path.getParent()); // ← 关键一步
Files.write(path, data);createDirectories()createDirectory()AccessDeniedExceptionIOExceptionTRUNCATE_EXISTINGFiles.write(path, bytes, StandardOpenOption.CREATE, StandardOpenOption.APPEND)Files.write(path, bytes, PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE)PosixFilePermissionFileAttributeDosFileAttributeViewStandardOpenOption.WRITECREATECREATE_NEWNoSuchFileExceptionFiles.write()byte[]OutOfMemoryErrorFiles.newOutputStream()BufferedOutputStreambytesInputStream.readAllBytes()