Java文件输出与控制台不匹配?

时间:2015-10-27 03:17:34

标签: java file file-io

我一直致力于这个做一些事情的项目(这并不重要),然后以下列格式输出结果:### x ### x ####:或者一些整数由小写字母x,然后是更多的整数,以字母x结尾。

我将输出写入控制台,数据看起来很好。我写一个文本文件,当它在记事本中打开时,它可以是中文字符,也可以是乱码。当我在记事本++中打开文件时,它很好。我已经尝试了我能想到的各种输出java,并改变了编码,但它们都结束了。我错过了什么?

我知道这不是接近最佳的地方,或者你是如何“输出”的。这是经过多次迭代测试铸造和连接的奇怪边缘情况,看看是否有效。

public static void printMap() throws IOException {
    //PrintWriter out = new PrintWriter("VertCover.txt", "UTF-8");
    //Charset charset = Charset.forName("UTF-8");
    //BufferedWriter out = new BufferedWriter(new FileWriter(new File("VertCover.txt")));
    Charset UTF8 = Charset.forName("UTF-8");
    Writer out = new OutputStreamWriter(new FileOutputStream("VertCover.txt"), UTF8);
    int counter = 0;
    String test = "";
    if (REDCOUNT < BLUECOUNT) {
        for (Entry<Integer, MapPoint> entry: pointMap.entrySet()) {
            if (entry.getValue().getColor() == -1) {
                test += entry.getKey().toString() + "x";
                counter++;
            }
        }
    } 
    else {
        for (Entry<Integer, MapPoint> entry: pointMap.entrySet()) {

            if (entry.getValue().getColor() == 1) {
                test += entry.getKey().toString() + "x";
                counter++;
            }
        }
        System.out.println();
        System.out.println();
        System.out.println();
        System.out.println(counter);
        out.write(test);
        System.out.println(test);

    }
    out.flush();
    out.close();
}

当前文本文件输出:...ㄱㅸ炮㌱㉸破㘲㉸ㄳ㍸㍸㐳㑸㑸㐴㑸砵㘴砷砷砷砷砷砷㙸㙸㙸㙸㙸㝸㝸㝸㝸㝸㝸㝸㝸㝸㔷㡸砰㔸㥸砰ㄹ...

entry.getKey()是一个整数:输出应该看起来像123x4654x321x968735x168

2 个答案:

答案 0 :(得分:1)

好的,如果您的文本文件的前8位是十六进制并且恰好与另一个随机编码代码相匹配,那么,Windows中的记事本会更改您的文本文件编码。因此,更改第一个字符,或在其中添加打印行

答案 1 :(得分:0)

我认为Notepad无法处理UTF-8,但Notepad ++是,因此在Notepad ++中看起来没问题。对于记事本,使用Charset ISO-8859-1而不是UTF-8应该没问题。