Класс
FileOutputStream пишет в файл "голые байты". Более того, ваши int'ы обрезаются до байта.
@Override
public void write(int oneByte) throws IOException {
write(new byte[] { (byte) oneByte }, 0, 1);
}
Текст/символы в представлении компьютера и числа это разные вещи. Т.е. например текст "256" это не число 256, текст "256" это три символа, и каждый символ занимает 8 байт в UTF-8 кодировке.
В итоге текстовый редактор просто отображает ваши обрезаные байты, которые ссылаются на разные символы("иероглифы").
Вам нужно либо ваши int'ы переводить в строку, а затем брать массив байт:
outputStream.write(String.valueOf(integ).getBytes());
Либо обернуть FileOutputStream в PrintStream и записывать данные в файл спомощью метода print. Который вызывает тот же самый getBytes:
public synchronized void print(String str) {
if (out == null) {
setError();
return;
}
if (str == null) {
print("null");
return;
}
try {
if (encoding == null) {
write(str.getBytes());
} else {
write(str.getBytes(encoding));
}
} catch (IOException e) {
setError();
}
}
ps закрывайте стримы, и не пользуйтесь обертками(Integer) если в этом нет необходимости.