书面* .txt文件末尾的EOT,FF,Z,?和其他花哨的字符

时间:2014-08-12 04:52:28

标签: java filewriter bufferedwriter

完全意外的事情我几分钟前已经注意到,对于一些不为人知的原因,Java的BufferedWriter通过更改int文件中的数字(例如*.txt)结束了它的工作该文件中的最后一个值为EOTFFZ?,甚至是{(对于数字1234)。在开始将数字写入String文件之前,我将数字更改为*.txt时问题就消失了。到底是怎么回事?我找不到任何关于这个案子的好解释,所以我会理解所有的解释。

以下是一个示例代码,有助于演示上述问题:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Zzz {
    public static void main(String args[]) {

        BufferedWriter writer;
        try {
            writer = new BufferedWriter(new FileWriter("zzz.txt"));
            for (int i = 0; i < 10; i++) {
                if (i != 9) {
                    for (int j = 0; j < 5; j++) {
                        if (j != 4) writer.write(j + "\t");
                        else  writer.write(j + "\n");
                    }
                } else {
                    for (int j = 0; j < 5; j++) {
                        if (j != 4) writer.write(j + "\t");
                        else  writer.write(j);
                    }
                }
            }
            writer.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

问题本身:

enter image description here

1 个答案:

答案 0 :(得分:1)

BufferedWriter#write(int)获取int,但会写char

writer.write(j + "\t");中发生的情况是j + "\t"自动转换为String,具体而言,取j的当前值并附加"\t"'结束。类似于writer.write(j + "\n")。但writer.write(j)j作为int,并将j的int值用作char。如果这样做,您可以检查特定行为:

int x = 90;
System.out.println((char)x);

输出:

Z