Java 文件读取器未读取正确的值

Java 文件读取器未读取正确的值,java,file-io,Java,File Io,我对Java非常陌生,我已经编写了两个小函数来读取和写入文件中的数据。正在写入的数据是游戏中地图上角色的x和y坐标。写入文件的数据似乎没有问题: 234 -123 我使用以下代码编写数据: public void save(int x, int y) { try { FileWriter fstream = new FileWriter("skygrim.txt"); //Create save-file BufferedWriter out

我对Java非常陌生,我已经编写了两个小函数来读取和写入文件中的数据。正在写入的数据是游戏中地图上角色的x和y坐标。写入文件的数据似乎没有问题:

234
-123
我使用以下代码编写数据:

public void save(int x, int y)
{
    try
    {
        FileWriter fstream = new FileWriter("skygrim.txt");  //Create save-file
        BufferedWriter out = new BufferedWriter(fstream);    //New writer, connected to save-file
        out.write(x + "\n" +y);        //Write position to file 
        out.close();                   //Close file
    }catch (Exception e){System.out.println("Error: " + e.getMessage());}
}
当我以后想要读取数据时,为了能够“加载”保存的游戏,我从文件中获取以下值:

50
51
public int[] read(String file)
{
    int[] coordinates = new int[2];
    try
    {
        FileReader fstream = new FileReader(file);
        BufferedReader in = new BufferedReader(fstream);
        coordinates[0] = in.read();
        coordinates[1] = in.read();
        in.close();
    }catch(Exception e){System.out.println("Error" + e.getMessage());}
    System.out.println("x: " + coordinates[0]);
    System.out.println("y: " + coordinates[1]);
    return coordinates;
}
我使用以下代码读取文件:

50
51
public int[] read(String file)
{
    int[] coordinates = new int[2];
    try
    {
        FileReader fstream = new FileReader(file);
        BufferedReader in = new BufferedReader(fstream);
        coordinates[0] = in.read();
        coordinates[1] = in.read();
        in.close();
    }catch(Exception e){System.out.println("Error" + e.getMessage());}
    System.out.println("x: " + coordinates[0]);
    System.out.println("y: " + coordinates[1]);
    return coordinates;
}
为什么程序读取文件的错误如此严重,我能做些什么

 coordinates[0] = in.read();
 coordinates[1] = in.read();

每次调用只读取一个字节。在本例中,您得到的是“2”和“3”(50和51是它们的ascii码)。因此是错误的值。

您的读取方法是读取文件的前两个字符:“2”和“3”。您可能想使用BufferedReader.readLine()

另请参见Integer.parseInt(String)

BufferedReader.read()
读取单个字符,而不是
int
。一种可能是使用
java.util.Scanner
及其方法
nextInt()
使用
BufferedReader
对象的
readLine()
方法避免像
read()
方法那样读取单个字符

coordinate[0] = Integer.parseInt(reader.readLine());
coordinate[1] = Integer.parseInt(reader.readLine());

它不读取一个字节。它读一个字符。但诊断是正确的。始终关闭finally块中的流和读卡器。或者使用Java7对资源进行尝试。javaapi有很好的文档记录。阅读javadoc会告诉您为什么代码不工作。