java nio只能写字节吗?例如:
Path path=FileSystems.getDefault().getPath("\(a path)")
Files.write(path, "test string".getBytes())
我不能仅将字符串传递给Files.write的第二个参数。 如果是这种情况,那为什么只能写入字节呢?
答案 0 :(得分:3)
另一种方法Files.write(Path,Iterable,Charset,OpenOption...)
可用于直接写入CharSequence
(String
是CharSequence
)。
将文本行写入文件。每行都是一个char序列,并按顺序写入到文件中,每行由平台的行分隔符终止,如系统属性
line.separator
所定义。使用指定的字符集将字符编码为字节。
options
参数指定如何创建或打开文件。如果不存在任何选项,则此方法就像存在CREATE,TRUNCATE_EXISTING和WRITE选项一样工作。换句话说,它将打开要写入的文件,如果不存在则创建文件,或者首先将现有的常规文件截断为0
大小。该方法确保在写入所有行后(或者引发I / O错误或其他运行时异常)关闭文件。如果发生I / O错误,则可能在创建或截断文件后或在将某些字节写入文件后发生。
Java 8添加了不需要Charset
的重载,并使用UTF-8
作为默认值。
Java 11添加了另一种方法:Files.writeString(Path,CharSequence,Charset,OpenOption...)
。
将CharSequence写入文件。使用指定的字符集将字符编码为字节。
所有字符均按原样写入,包括char序列中的行分隔符。没有添加额外的字符。
options
参数指定如何创建或打开文件。如果不存在任何选项,则此方法就像存在CREATE,TRUNCATE_EXISTING和WRITE选项一样工作。换句话说,它将打开文件进行写入,如果不存在则创建文件,或者首先将现有的常规文件截断为0
大小。
此方法还具有不需要Charset
的重载,再次使用UTF-8
作为默认值。
在幕后,CharSequence
转换为字节,就像问题注释中提到的Scary Wombat和yshavit一样。这些方法的文档甚至对此进行了明确说明:
使用指定的字符集将字符编码为字节。