Недавно изучаю 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");
}
}
}
Можно использовать 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();
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Для расширения типов Hibernate использую vladmihalcea/hibernate-types
У меня есть самый простой, насколько это возможно, XML-файл
Мне необходимо выполнить поиск bluetooth устройств внутри привязанной службы (bounded service) с помощью функции startdiscoveryДля этого надо установить broadcast...