2

我对 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;
}

为什么程序读取文件如此严重错误,我该怎么办?

4

4 回答 4

8

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

另请参阅 Integer.parseInt(String)

于 2012-05-29T17:44:30.557 回答
2

BufferedReader.read()读取单个字符,而不是int. 一种可能是使用java.util.Scanner和它的方法nextInt()

于 2012-05-29T17:44:38.137 回答
0
 coordinates[0] = in.read();
 coordinates[1] = in.read();

每次调用只读取一个字节。在这种情况下,您将得到“2”和“3”(50 和 51 是它们的 ascii 代码)。因此错误的价值。

于 2012-05-29T17:44:11.837 回答
0

使用对象的readLine()方法来避免像方法那样BufferedReader读取单个字符。read()

coordinate[0] = Integer.parseInt(reader.readLine());
coordinate[1] = Integer.parseInt(reader.readLine());
于 2012-05-29T17:49:01.260 回答