身份不明的符号

时间:2015-05-27 06:42:34

标签: java io symbols

鉴于以下内容:

import java.io.*;

public class WriteRead {

    public void writeToFile(String filename) throws IOException {
        FileWriter fw = new FileWriter(filename);
        fw.write("testing");
        fw.close();
    }

    public String readFromFile(String filename) throws IOException {
    String str = "";
    int characterInt = 0;
    FileReader fr = new FileReader(filename);
        while (characterInt != -1) {
            characterInt = fr.read();
            str += "" + (char) characterInt;
        }
    fr.close();
    return str;
  }

  public static void main(String[] args) throws IOException {
    WriteRead wR = new WriteRead();
    wR.writeToFile("test.java");
    System.out.println(wR.readFromFile("test.java"));
  }
}

当我运行程序时,它打印以下内容:

enter image description here

“测试”结束时的符号是什么,程序的哪个部分会导致它出现?

3 个答案:

答案 0 :(得分:2)

使用以下代码 -

ResponseContentRead

因为在最后一次迭代中,这会在while ((characterInt = fr.read()) != -1) { str += "" + (char) characterInt; } 上显示-1,所以请在添加之前进行检查。并且只要您对?的显示有疑问,请给我第一个十六进制代码。

答案 1 :(得分:1)

进行如下更改:

while ((characterInt = fr.read()) != -1) {
            //characterInt = fr.read();
            str += "" + (char) characterInt;
        }

阅读char并将其与-1 as EOF进行比较。您正在将end of file char附加到字符串中,然后while循环条件失败。

答案 2 :(得分:1)

您在characterInt = fr.read();循环中设置了while。您应该在while循环之外或while()条件下设置此值。

因此,根据您的代码,它将运行第二次迭代,因为在第二次迭代中,您的characterInt不等于-1(它保持较早的值,即测试)。