1

通常,当我阅读文本文件时,我会这样做:

 File file = new File("some_text_file.txt");
 Scanner scanner = new Scanner(new FileInputStream(file));
 StringBuilder builder = new StringBuilder();
 while(scanner.hasNextLine()) {
     builder.append(scanner.nextLine());
     builder.append('\n');
 }
 scanner.close();
 String text = builder.toString();

可能有更好的方法,但这种方法一直对我很有效。

对于我现在正在做的事情,我需要阅读一个大文本文件(大小超过 700 KB)。以下是在记事本(任何 Windows 操作系统的标准配置)中打开时的文本示例:

"lang"
{
    "Language"      "English"
    "Tokens"
    {
        "DOTA_WearableType_Daggers"     "Daggers"
        "DOTA_WearableType_Glaive"      "Glaive"
        "DOTA_WearableType_Weapon"      "Weapon"
        "DOTA_WearableType_Armor"       "Armor"

但是,当我使用上面提供的方法从文件中读取文本时,输出为:

样本输出

由于某种原因,我无法粘贴输出。我也尝试像这样读取文件:

 File file = new File("some_text_file.txt");
 Path path = file.toPath();
 String text = new String(Files.readAllBytes(path));

...结果没有变化。

为什么输出不符合预期?我还尝试阅读我编写的文本文件,它工作得非常好。

4

2 回答 2

2

它看起来像编码问题。使用可以检测编码的工具打开文件(如 Notepad++)并查找其编码方式。然后为 Scanner 使用另一个构造函数:

Scanner scanner = new Scanner(new FileInputStream(file), encoding);

或者您可以简单地尝试一下,尝试不同的编码。对我来说,它看起来像 UTF-16。

于 2013-05-30T06:45:37.900 回答
1

最终扫描仪扫描仪=新扫描仪(新文件输入流(文件),“UTF-16”);

于 2013-05-30T07:07:17.640 回答