Как записать double в файл java

Обновлено: 08.07.2024

Байтовые потоки. Классы DataInputStream , DataOutputStream , FileInputStream , FileOutputStream . Примеры использования

В данной теме продемонстрировано использование средств языка Java для работы с байтовыми потоками. Приведены примеры распространенных задач для решения которых используются классы DataInputStream , DataOutputStream , FileInputStream , FileOutputStream .

Содержание

Поиск на других ресурсах:

1. Запись и чтение одномерного массива типа int[] в байтовый файловый поток. Пример

Пусть задан одномерный массив типа int[] , который нужно:

  • записать в байтовый файловый поток;
  • прочитать из байтового файлового потока.

Для решения данной задачи хорошо подойдутклассы:

  • DataInputStream – поток ввода, который содержит методы для чтения данных стандартных типов Java, к которым принадлежит тип int ;
  • DataOutputStream – поток вывода, который содержит методы для записи данных стандартных типов, определенных в Java;
  • FileInputStream – поток ввода, который содержит методы, читающие данные из файла;
  • FileOutputStream – поток вывода, который содержит методы, записывающие данные в файл.

Чтобы организовать запись данных в файл нужно:

  • создать файловый поток типа FileOutputStream ;
  • созданный файловый поток поместить в конструктор DataOutputStream ;
  • использовать методы класса DataOutputStream для записи данных в файл.

Чтобы организовать чтение данных из файла нужно:

  • создать файловый поток типа FileInputStream ;
  • новосозданный файловый поток поместить в конструктор DataInputStream ;
  • использовать методы класса DataInputStream для чтения данных из файла.

Пример.

Результат выполнения программы

2. Запись и чтение данных разных типов ( double , int , char ). Пример
  • записать в файл последовательно значения переменных типов double , int , char ;
  • прочитать значение переменных типов double , int , char .

Результат выполнения программы

4. Пример копирования файлов с использованием байтового потока

В примере приводится фрагмент кода, который осуществляет копирование файлов. Используются средства классов FileInputStream и FileOutputStream .


Для работы с вещественными (дробными) числами в Java используется тип double . В памяти он занимает 8 байт (в два раза больше, чем тип int ) и может хранить значения в диапазоне -1.7*10 308 до +1.7*10 308 . Для сравнения: тип int может хранить значение в диапазоне -2*10 9 до +2*10 9 .

Кстати, кроме типа double есть еще вещественный тип float (размером всего 4 байта). Его название как раз и происходит от floating point . Название же double происходит от double float . Тип double в два раза больше, чем float : 8 байт против 4 . Его еще называют вещественное число двойной точности .

2. Создание переменной типа double

Тип double используется для хранения вещественных чисел. Чтобы создать в коде переменную, которая будет способна хранить вещественные числа, нужно воспользоваться командой:

Где имя — это имя переменной. Примеры:

Команда Описание
Создается вещественная переменная price
Создается вещественная переменная weight
Создается вещественная переменная lightSpeed

Так же, как и с типом int , можно использовать краткую запись для создания нескольких переменных типа double :

И даже сразу присваивать им значения:

Создание и инициализация нескольких переменных типа double

Команда Примечание
В переменной хранится значение 5.0
В переменной хранится значение 2.0

3. Присваивание целых и вещественных чисел

Было бы плохо, если бы целые числа можно было присваивать только переменным типа int , а вещественные — только переменным типа double . Хотелось бы иметь возможность преобразовывать одни числа в другие. И в Java такая возможность есть.

Во-первых, переменным типа double можно присваивать как вещественные, так и целые числа. При присваивании целых чисел они просто преобразовываются в вещественные. Хотя иногда при этом возможна небольшая потеря точности.

Команда Примечание
В переменной хранится значение 5.0
В переменной хранится значение 2.0

В переменной x хранится значение 1000000.0

Во-вторых, если в каком-то выражении участвуют целое и вещественное число, целое сначала преобразуется в вещественное и только потом взаимодействует с другим вещественным числом.

Команда Примечание

В переменной x хранится значение 5000.0
На экран будет выведено число 10
На экран будет выведено число 10.0

И наконец, есть возможность присваивать переменным типа int вещественные числа. Дробная часть числа при этом отбрасывается — число округляется вниз до целого.

Также компилятор требует, чтобы этот факт программист задокументировал явно (чтобы другие программисты понимали, что тут происходит отбрасывание дробной части). Общий вид этого выражения в коде такой:


Каждое приложение, программа имеют возможности записи чего-либо в файл. В данном уроке я продемонстрирую как можно записать какие-то данные в файл, а потом считать их оттуда.

Какие проблемы мы будем решать в этом уроке?

Подготовительные работы

Создадим простой проект, не обязательно Maven проект, так как нам не потребуется не каких дополнительных библиотек.

После того как вы создали проект, создайте класс WorkInFile.java и напишите туда стандартную конструкцию main:

Теперь создадим класс который будет иметь методы для работы с файлами, а назовем его FileWorker.java все методы в нем которые не есть private будут статическими для того чтобы мы получали к ним доступ без экземпляра этого класса.

Как записывать в файл?

В классе FileWorker.java создадим статический метод который будет осуществлять запись в файл и назовем этот метод write(String text; String nameFile):

Обратите особое внимание на то, что после записи каких либо данных в файл мы должны его закрыть, только после этого действия данные запишутся в файл.

2. Как читать файл?

Теперь в классе FileWorker создадим метод для чтения файла, также статический:

Также если файла нет то метод выкинет Exception.

Для проверки на существование файла создадим метод, так как нам еще потребуется эта проверка в следующих методах:

Теперь проверим его:

В первом случае когда файл не существует мы получим это:

Во втором случае, мы получим содержимое файла в виде строки. (для этого закомментируйте первый случай)

3. Как обновить файл?

Как такого Update для файлов нет, но способ обновить его есть, для этого можно его перезаписать.

Давайте создадим метод update в классе FileWorker:

Тут мы считываем старый файл в StringBuilder после чего добавляем к нему новый текст и записываем опять. Обратите внимание что для этого мы используем наши методы.

В результате обновления файла:

4. Как удалить файл?

В тот же наш утилитный класс FileWorker добавим метод delete, он будет очень простым так как у объекта File уже есть метод delete():

snimok-ekrana-2016-11-16-v-21-25-22
snimok-ekrana-2016-11-16-v-21-35-19

*Это Говард Стивен Берг (Howard Stephen Berg), один из самых быстро читающих людей в мире 🙂 А FileWriter - Уильям Шекспир.

  • написана командой Vertex Academy. Надеемся, что она Вам будет полезна. Приятного прочтения!
  • это одна из статей из нашего "Самоучителя по Java"

Рассмотрим работу с FileWriter и FileReader:

  • с помощью FileWriter мы можем создавать файлы
  • с помощью FileReader - считывать их
Внимание:

Потоки FileWriter и FileReader немного отличаются от того, с чем мы встречались ранее. Работая с ними, понадобится всегда помнить 3 важных момента:

1. Объявление

Перед тем, как вызывать какие-нибудь методы для работы с файлами, нужно объявить FileWriter/FileReader:

snimok-ekrana-2016-11-17-v-17-07-25

snimok-ekrana-2016-11-17-v-17-10-14

Но Eclipse может не распознать FileReader/FileWriter и начнет ругаться. Если такое произойдет, посмотрите, импортировали ли вы библиотеку java.io.*. Для этого в самой первой строчке напишите:

2. Нужно закрыть поток

FileWriter/FileReader - это потоки, их нужно не только «открыть» (то-есть объявить), но и «закрыть» . Представьте, что Вы открыли кран. Нельзя же уйти из дому, оставив воду литься?

stocksnap_03f8a942c5

Это правило работает и для других потоков - кроме стандартных System.in и System.out.

Закрыть поток можно с помощью .close() :

public static void main ( String [ ] args ) throws Exception <

3. Допишите "волшебную фразу".

В программировании очень важна безопасность . А работа с FileWriter/FileReader - это небезопасно , в процессе может возникнуть масса разных ошибок. Это беспокоит Eclipse (или IntellijIdea - смотря чем пользуетесь), и программу она просто так не запустит. Помните, что к методу нужно дописать «throws Exception» :

Итак, еще раз акцентируем внимание - всегда Вы должны помнить о 3 моментах:

И еще, потоки FileWriter и FileReader воспринимают все файлы как текстовые:

snimok-ekrana-2016-11-16-v-21-44-24

FileWriter

Теперь представим, что Вы начинаете использовать FileWriter.

1. Объявление.

Как Вы помните, нужно не забыть импортировать библиотеки java.io.* и дописать "волшебную фразу" к методу, где Вы собираетесь объявить FileWriter.

Объявляем, как помните, почти как Scanner:

snimok-ekrana-2016-11-17-v-17-07-25

Объявили. А что теперь можно делать? Теперь пора пользоваться возможностями FileWriter!

Основной метод FileWriter - это метод .write() .

Мало? Да, но посмотрите, как много с ним можно сделать:

public static void main ( String [ ] args ) throws Exception < public static void newFile ( int k1 , int k2 ) throws Exception <

*обратите внимание - мы написали нашу "волшебную фразу" и в методе main, и в методе newFile.

Так мы можем записать числа от k1 до k2, от 2 до 9, в наш файл file1.txt. Можно записывать только четные или нечетные числа, какой-нибудь текст, и многое другое.

2. Переход на следующую строку

Но мы Вам кое-чего не сказали. Если запустить код из прошлого пункта, получится:

Если понадобится вывести числа в столбик, понадобится добавить " \n " от "new line", новая строка. Запишем в файл стих:

public static void main ( String [ ] args ) throws Exception < nFile . write ( "Хокку \nПодобен лучу самурайский клинок \nИ тот затупился \nПроклятая килька в томате!!" ) ;

Каждый раз, когда мы хотели, чтобы программа переходила на новую строку, мы ставили " \n ":

Теперь вы знаете, как вывести числа с новой строки:

public static void main ( String [ ] args ) throws Exception < public static void newFile ( int k1 , int k2 ) throws Exception <

3. Закрываем поток

После того, как Вы записали все необходимое, нужно не забыть закрыть поток. Это мы делали в каждом из приведенных примеров:

FileReader

Теперь, рассмотрим пошагово работу с FileReader.

1. Объявление

Сначала FileReader, как и FileWriter, нужно объявить . Не забудьте про библиотеку и " волшебную фразу ":

public static void main ( String [ ] args ) throws Exception <

2. FileReader + Scanner

Мы объявили не только FileReader, но и Scanner. Почему?

В отличии от FileWriter, FileReader не используется один:

2_shake
2_reader

Не вдаваясь в подробности, запомните, что FileReader и Scanner идут вместе. Но не забывайте их "связать" - для этого напишите название вашего объекта FileReader вместо "System.in" при объявлении Scanner:

3. Методы

Тут уже больше методов. Рассмотрим методы .nextLine() и .hasNextLine().

  • .nextLine() - это метод, который считывает строку (до ENTER), и возвращает это значение
  • .hasNextLine() - метод, который возвращает boolean - true или false, показывая, есть ли следующая строка.
public static void main ( String [ ] args ) throws Exception <

Должен быть такой результат:

Обратите внимание: мы используем .hasNextLine() для того, чтобы избежать ошибки, и не заставлять .nextLine() считывать строку, которой не существует:

snimok-ekrana-2016-11-22-v-19-11-15

snimok-ekrana-2016-11-22-v-19-11-15

4. Закрываем поток.

snimok-ekrana-2016-11-22-v-19-16-10

Готово. Теперь Вы знаете, как работать с FileWriter и FileReader.

Надеемся, что наша статья была Вам полезна. Также есть возможность записаться на наши курсы по Java в Киеве. Обучаем с нуля. Детальную информацию Вы можете найти у нас на сайте.

Читайте также: