使用 Java 中的特定编码写入文件

MrJ*_*eno 0 java encoding utf-8 iso-8859-15 randomaccessfile

可能与我之前的问题有关(关于如何将“för”转换为“för”)

所以我在我的代码中创建了一个文件。现在我通过以下代码创建它:

FileWriter fwOne = new FileWriter(wordIndexPath);
BufferedWriter wordIndex = new BufferedWriter(fwOne);
Run Code Online (Sandbox Code Playgroud)

跟着几个

wordIndex.write(wordBuilder.toString()); //that's a StringBuilder
Run Code Online (Sandbox Code Playgroud)

结束(在while循环之后)

wordIndex.close();
Run Code Online (Sandbox Code Playgroud)

现在问题是这个文件很大,我想(需要)在不遍历整个文件的情况下跳转到它。让我这样做的seek(long pos)方法RandomAccessFile

这是我的问题:我创建的文件中的字符似乎是用 UTF-8 编码的,我寻找时唯一的信息是我想跳转到的字符位置。seek(long pos)另一方面,以字节为单位跳转,因此我不会在正确的位置结束,因为 UTF-8 字符可能超过一个字节。

这是我的问题:当我写文件时,我可以用 ISO-8859-15 来写它吗(其中一个字符是一个字节)?这样,这seek(long pos)将使我处于正确的位置。或者我应该尝试使用替代方法RandomAccessFile(是否有替代方法可以跳转到字符位置?)

Joo*_*gen 6

现在首先是令人担忧的。FileWriter 和 FileReader 是旧的实用程序类,它们使用该计算机上的默认平台设置。在别处运行该代码将提供不同的文件,将无法从另一个位置读取文件。

ISO-8859-15 是单字节编码。但是java以Unicode保存文本,因此它可以组合所有脚本。并且char是UTF-16。通常,字符索引不会是字节索引,但在您的情况下它可能有效。但是换行符可能是一\n两个\r\n字符/字节 - 取决于平台。

关于

我个人认为 UTF-8 已经很成熟了,使用起来更方便:

byte[] bytes = string.getBytes(StandardCharsets.UTF_8);
string = new String(bytes, StandardCharsets.UTF_8);
Run Code Online (Sandbox Code Playgroud)

这样,所有特殊报价、欧元等将始终可用。

至少指定编码:

Files.newBufferedWriter(file.toPath(), "ISO-8859-15");
Run Code Online (Sandbox Code Playgroud)