i trying save some integers and doubles to txt file in binary format. Numbers are saved correctly i think, but problem is when i try read integer with readInt(). For example, when integer number have value = 12, program output for this integer is 208797696, and program with more integers always end with EOF exception. There´s not problem with readDouble(), it works correct.
import java.util.Scanner;
import java.io.*;
public class CandyFruit {
public static void main(String[] args) throws IOException {
int i;
int int_sc ;
double double_sc;
String string_sc;
int seek_w = 0; //seek for writing
String map = "";
Scanner scan = new Scanner(System.in);
try (RandomAccessFile write = new RandomAccessFile("fgh.txt", "rw")) {
for (;;) {
System.out.println("1 - write int, 2 - write double, 0 - break");
i = scan.nextInt();
if (i == 0) break;
System.out.println("Your choice:");
if (i == 1) {
int_sc = scan.nextInt();
write_int(write, int_sc, seek_w);
map = map + "1";
seek_w += 4; //seek growth for int
}
else if (i == 2) {
double_sc = scan.nextDouble();
write_double(write, double_sc, seek_w);
map = map + "2";
seek_w += 8; //seek growth for double
}
}
}
//catch
try (RandomAccessFile read = new RandomAccessFile("fgh.txt", "rw")) {
int seek_r = 0;
for (int o = 0; o < map.length(); o++) {
char c = map.charAt(o);
if (c == '1') {
read_int(read, seek_r);
seek_r += 4; //seek growth for int
}
else if (c == '2') {
read_double(read, seek_r);
seek_r += 8; //seek growth for double
}
}
}
//catch
}
public static void write_int (RandomAccessFile write, int scanned, int s) throws IOException {
write.seek(s);
write.write(scanned);
}
public static void write_double(RandomAccessFile write, double scanned, int s) throws IOException {
write.seek(s);
write.writeDouble(scanned);
}
public static void read_int(RandomAccessFile read, int s) throws IOException {
read.seek(s);
System.out.println("Int is: "+read.readInt());
}
public static void read_double(RandomAccessFile read, int s) throws IOException {
read.seek(s);
System.out.println("Double is: "+read.readDouble());
}
}
Your write_int
method writes using RandomAccessFile.write()
, which writes a byte to the file. When you use readInt()
, you read that single byte plus three bytes of other arbitrary data (because you didn't write them).
You should use RandomAccessFile.writeInt()
in write_int
instead.