how to write an array to a file Java
I have been trying to write an array to a file. I know how to write integers or String to a file but to bring an array confuses me. I am using this right now:
6 Answers 6
Like others said, you can just loop over the array and print out the elements one by one. To make the output show up as numbers instead of «letters and symbols» you were seeing, you need to convert each element to a string. So your code becomes something like this:
If you just want to print out the array like [1, 2, 3, . ] , you can replace the loop with this one liner:
You can use the ObjectOutputStream class to write objects to an underlying stream.
Как java как массив в файл сохранить
Запись файлов и класс FileOutputStream
Класс FileOutputStream предназначен для записи байтов в файл. Он является производным от класса OutputStream, поэтому наследует всю его функциональность.
Через конструктор класса FileOutputStream задается файл, в который производится запись. Класс поддерживает несколько конструкторов:
Файл задается либо через строковый путь, либо через объект File. Второй параметр — append задает способ записи: eсли он равен true, то данные дозаписываются в конец файла, а при false — файл полностью перезаписывается
Например, запишем в файл строку:
Для создания объекта FileOutputStream используется конструктор, принимающий в качестве параметра путь к файлу для записи. Если такого файла нет, то он автоматически создается при записи. Так как здесь записываем строку, то ее надо сначала перевести в массив байтов. И с помощью метода write строка записывается в файл.
Для автоматического закрытия файла и освобождения ресурса объект FileOutputStream создается с помощью конструктции try. catch.
При этом необязательно записывать весь массив байтов. Используя перегрузку метода write() , можно записать и одиночный байт:
Чтение файлов и класс FileInputStream
Для считывания данных из файла предназначен класс FileInputStream , который является наследником класса InputStream и поэтому реализует все его методы.
Для создания объекта FileInputStream мы можем использовать ряд конструкторов. Наиболее используемая версия конструктора в качестве параметра принимает путь к считываемому файлу:
Если файл не может быть открыт, например, по указанному пути такого файла не существует, то генерируется исключение FileNotFoundException .
Считаем данные из ранее записанного файла и выведем на консоль:
В данном случае мы считываем каждый отдельный байт в переменную i:
Когда в потоке больше нет данных для чтения, метод возвращает число -1.
Затем каждый считанный байт конвертируется в объект типа char и выводится на консоль.
Подобным образом можно считать данные в массив байтов и затем производить с ним манипуляции:
В данном случае с помощью метода read() считываем данные в массив buffer длиной 256 байтов. Метод возвращает количество считанных байтов.
Поскольк файл может быть больше 256 байтов, то считываем в цикле while до конца файла. Когда больше не останется файлов для считывания, то метод возвратит -1.
Поскольку количество считанных байтов/размер файла могут быть меньше 256 байт, то реальное количество считанных байт сохраняем в переменную count. Затем выводим считанное количество данных на консоль в цикле for.
Совместим оба класса и выполним чтение из одного и запись в другой файл:
Классы FileInputStream и FileOutputStream предназначены прежде всего для записи двоичных файлов, то есть для записи и чтения байтов. И хотя они также могут использоваться для работы с текстовыми файлами, но все же для этой задачи больше подходят другие классы.
Сохранение массива объектов
— Привет, Амиго! Сегодня мы познакомимся с еще одной интересной темой. А именно: сохранением и загрузкой (восстановлением) объектов . Допустим у нас есть класс Cat:
И мы хотим добавить в него удобный механизм сохранения в файл и загрузки из файла.
Вот как это можно сделать:
— О! Это же очень просто. Мы просто печатаем значения всех аргументов, по одному в каждой строчке. А при загрузке читаем их в том же порядке. Отличное решение.
— Спасибо, Амиго. А можешь написать, как будут выглядеть методы save и load у такой группы классов:
У тебя есть объект человек, и он может иметь одну собаку и одного кота.
— У меня есть решение:
— Очень хорошее решение. Но что будет, если у человека нет кота, а есть только собака?
Где проверки на null?
— Все равно не очень верно. У тебя две ошибки:
1) Если у человека нет ни кота, ни собаки, они все равно будут созданы, при вызове метода load
2) Если мы сохраним только собаку, то ее данные будут прочитаны котом при загрузке.
— А что же делать?
— Мы не можем пропускать запись переменных, иначе это вызовет сбой при чтении . Но нужно сделать так, чтобы переменные, чье значение было null при сохранении и после загрузки, получали null. Вот мой вариант:
Write and read an ArrayList object to a file in Java
Today, we will get to know how to write an ArrayList object to a file and then load the object back to the Java program form that file. This would help us to store the data to test other features that we added to the program without re-putting the common data.
First, we’ll take a look at the code below

1. Since we will need to use a lot of classes inside java.io, we import everything inside that specific library.
2. Create a class Person with 3 attributes, a constructor function and overriding toString method to print the detail of an object we will initialize later. As this the objects of this class will be used to write to file and then load back, we need to implement the Serializable interface to indicate Java that this class can be serialized or deserialized.
3. inside this main methods we will create 3 objects of the class Person. Then, we create an ArrayList name people and add those 3 Person objects.
Now, we are ready to write this Arraylist into a file.
Write an object into a file.
We add this code to the main method.
Because writing and reading data can cause Error we need to use a try catch block to handle the Exception that can occur.
FileOutputStream writeData = new FileOutputStream(“peopledata.ser”): Creates a file output stream to write to the file that we provide inside the parentheses. You can provide the path to the file if you want, in this case, I just give the file name, so that the file will be stored in the same folder with the .java file
ObjectOutputStream writeStream = new ObjectOutputStream(writeData): ObjectOutputStream will handle the object to be written into the file that FileOutputStream created.
FileOutputStream and ObjectOutputStream should come together in order to write an object to a file.
writeStream.writeObject(people): tell the program to write this peple object which is an ArrayList that we’ve just created above into the file peopledata.ser
writeStream.flush(): using the flush method here is not really necessary but it’s a good practice to have flush() since it will flush all the data in the stream, make sure data is written into the file.
writeStream.close(); we close the stream after the writing is done. This also releases the system resources.
Open the file peopledata.ser and you will see that there is something written. Don’t be afraid that you can’t read it, Java can.
Reading the data from a file
Writing is done, now we can load the data from the file to be used in our program.
Append the code below to the main method
Still, we use try-catch to ensure that all the exceptions will be caught.