我是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;
}
为什么程序读取文件非常错误,我该怎么办呢?
答案 0 :(得分:8)
你的read方法是读取文件的前两个字符:'2'和'3'。您可能想要使用BufferedReader.readLine()
另见Integer.parseInt(String)
答案 1 :(得分:2)
BufferedReader.read()
读取单个字符,而不是int
。可能的方法是使用java.util.Scanner
及其方法nextInt()
。
答案 2 :(得分:0)
coordinates[0] = in.read();
coordinates[1] = in.read();
每次调用只读一个字节。在这种情况下,你得到'2'和'3'(50和51是他们的ascii代码)。因而错误的价值。
答案 3 :(得分:0)
使用readLine()
对象的BufferedReader
方法,以避免按read()
方法读取单个字符。
coordinate[0] = Integer.parseInt(reader.readLine());
coordinate[1] = Integer.parseInt(reader.readLine());