Java:从文件中读取文本会产生奇怪的格式

时间:2013-05-30 06:39:53

标签: java file text

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

 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千字节)。以下是在记事本中打开的文本示例(任何Windows操作系统标配的文本):

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

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

Sample output

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

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

......结果没有变化。

为什么输出不如预期?我也尝试过阅读我写的文本文件,但它工作得很好。

2 个答案:

答案 0 :(得分:2)

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

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

或者你可以简单地试验它,尝试不同的编码。它看起来像UTF-16。

答案 1 :(得分:1)

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