0

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

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

FileWriter fwOne = new FileWriter(wordIndexPath);
BufferedWriter wordIndex = new BufferedWriter(fwOne);

跟着几个

wordIndex.write(wordBuilder.toString()); //that's a StringBuilder

结束(在一个while循环之后)

wordIndex.close();

现在问题是这个文件很大,我想(需要)在不浏览整个文件的情况下跳进去。的seek(long pos)方法RandomAccessFile让我这样做。

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

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

4

1 回答 1

6

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

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

关于

个人认为 UTF-8 已经很成熟了,而且更容易使用:

byte[] bytes = string.getBytes(StandardCharsets.UTF_8);
string = new String(bytes, StandardCharsets.UTF_8);

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

至少指定编码:

Files.newBufferedWriter(file.toPath(), "ISO-8859-15");
于 2016-09-01T08:58:43.327 回答