Scanner, FileOutputStream и чтение double

169
25 июля 2018, 21:40

Недавно изучаю Java. Набросал код который копирует double значения из одного файла в другой.

public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        Scanner scanner = new Scanner(new FileInputStream(reader.readLine()));
        FileOutputStream fos = new FileOutputStream(reader.readLine());
        while (scanner.hasNextDouble()) {
            double d = scanner.nextDouble();
            System.out.print(d + " ");
            fos.write((int)d);
        }
    }

Исходный файл: 3,1415 1,13315 2,222

Проблема в том, что в результирующий файл эти значения не попадают, но вместо них вставляется 3 пробела. Почему так происходит? Заранее благодарю.

Upd:

-Я сознательно оборачиваю FileOutputStream в scanner. Значений в файле предположительно может быть очень много, и другие известные мне подходы(побайтовое/построковое/буфферное чтение) либо неэффективны либо перерастают в огромную логику.

-Код не будет работать и без аргумента d: к примеру fos.write(11) даёт тот же результат.

-Пробовал вытащить запись в файл из цикла таким образом:

byte[] ar = new byte[3];
        int i = 0;
        while (scanner.hasNextDouble()) {
            ar[i] = (byte)(scanner.nextDouble());
            i++;
        }
        for (byte b:ar){
            System.out.print(b + " ");
        }
        fos.write(ar);

Вывод 3 1 2, результат не поменялся.

Полный код:

public class Solution {
    public static void main(String[] args) {
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
             Scanner scanner = new Scanner(new FileInputStream(reader.readLine()));
             FileOutputStream fos = new FileOutputStream(reader.readLine())) {
            while (scanner.hasNextDouble()) {
                double d = scanner.nextDouble();
                System.out.print(d + " ");
                fos.write((int) d);
            }
        } catch (IOException e) {
            System.out.println("Error");
        }
    }
}
Answer 1

Можно использовать FileWriter и сделать как нибудь вот так...

    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    Scanner scanner = new Scanner(new FileInputStream(reader.readLine()));
    FileWriter writer = new FileWriter(reader.readLine());

    while (scanner.hasNextDouble()) {
        double d = scanner.nextDouble();
        String s = d + " ";
        writer.write(s.replace('.', ','));
    }
    scanner.close();
    writer.close();
READ ALSO
Hibernate ошибка преобразования MySQL JSON UTF8

Hibernate ошибка преобразования MySQL JSON UTF8

Для расширения типов Hibernate использую vladmihalcea/hibernate-types

191
Проблема с XML и отрисовкой чего-либо с него

Проблема с XML и отрисовкой чего-либо с него

У меня есть самый простой, насколько это возможно, XML-файл

178
ACTION_FOUND Broadcast inside bound service

ACTION_FOUND Broadcast inside bound service

Мне необходимо выполнить поиск bluetooth устройств внутри привязанной службы (bounded service) с помощью функции startdiscoveryДля этого надо установить broadcast...

197
Как работает метод flush() в spring-data-jpa?

Как работает метод flush() в spring-data-jpa?

Есть проект на стеке spring-boot-20

261