Cititorul de fișiere nu citește valorile corecte

Sunt destul de nou în Java și am scris două funcții mici pentru a citi și a scrie date într-un fișier. Datele scrise sunt coordonatele x și y ale unui caracter de pe hartă într-un joc. Datele scrise în fișier par să fie în regulă:

234
-123

Vă scriu datele cu următorul cod:

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());}
}

Când mai târziu vreau să citesc datele, pentru a putea "încărca" un joc salvat, obțin următoarele valori din fișier:

50
51

Folosesc următorul cod pentru a citi din fișier:

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

De ce programul a citit fișierul atât de greșit și ce pot face în legătură cu acesta?

0
Întotdeauna închideți fluxurile și cititorii într-un bloc în cele din urmă. Sau utilizați Java 7 try-with-resources. API-ul Java este foarte bine documentat. Citirea javadoc-ar fi spus de ce codul dvs. nu funcționează. docs.oracle.com/ javase/6/docs/api/java/io/& hellip;
adăugat autor JB Nizet, sursa

4 răspunsuri

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

Citiți câte un octet cu fiecare apel. În acest caz primiți '2' și '3' (50 și 51 sunt codul ascii lor). Și, prin urmare, valoarea greșită.

0
adăugat
Da, ai dreptate. BufferedReader citește un caracter.
adăugat autor Wei Ma, sursa
Nu citește un octet. Citește un personaj. Dar diagnosticul este cel potrivit.
adăugat autor JB Nizet, sursa

BufferedReader.read() reads a single character, not an int. A possibility would be to use java.util.Scanner and its method nextInt().

0
adăugat

Utilizați metoda readLine() a obiectului BufferedReader pentru a evita citirea unui singur caracter ca metodă read() .

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

metoda dvs. de citire citește primele două caractere ale fișierului: "2" și "3". Probabil doriți să utilizați BufferedReader.readLine ()

De asemenea, vedeți Integer.parseInt (String)

0
adăugat