В этом уроке будет продемонстрирована работа с FileInputStream и FileOutputStream потоками, где мы рассмотрим как записать данные в файл и как их оттуда прочитать.
Шаг 1
Создаем простой Java проект и создаем файл FileInputOutputStream.java со следующим содержимым:
package examples; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class FileInputOutputStream { // Класс для работы потоком вывода из файла private FileInputStream inputStream; // Класс для работы потоком ввода в файл private FileOutputStream outputStream; // полный путь к файлу private String path; public FileInputOutputStream(String path) { this.path = path; } public void read() throws IOException { // инициализируем поток вывода из файлу inputStream = new FileInputStream(path); // читаем первый символ с потока байтов int data = inputStream.read(); char content; // если data будет равна 0 то это значит, // что файл пуст while(data != -1) { // переводим байты в символ content = (char) data; // выводим полученный символ System.out.print(content); // читаем следующий байты символа data = inputStream.read(); } // закрываем поток чтения файла inputStream.close(); } public void write(String st) throws IOException { // открываем поток ввода в файл outputStream = new FileOutputStream(path); // записываем данные в файл, но // пока еще данные не попадут в файл, // а просто будут в памяти outputStream.write(st.getBytes()); // только после закрытия потока записи, // данные попадают в файл outputStream.close(); } }
Возможно вы уже заметили что чтение и запись не чем толком не отличается от того как мы это делал в этом уроке, но FileInputStream и FileOutputStream предлагает специальные возможности именно для работы с файлами.
Шаг 2
Запускаем и смотрим результат в консоли:
Hello DevColibri!
а потом проверяем файл и видим что текст записался.
ПОХОЖИЕ ПУБЛИКАЦИИ
- None Found
9 комментариев к статье "Урок 3. Работа с файлами используя FileInputStream и FileOutputStream"
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
Если вы не используете FileInputStream/FileOutputStream нигде кроме как в функциях read/write. То почему бы их экземпляры не объявить локально там где они будут используются?
использоваться*
а что если в ходе будет выброшено исключение и поток не будет закрыт?
outputStream.write(st.getBytes());
При работе с байтами лучше указывать кодировку, что бы потом не было сюрпризов.
outputStream.write(st.getBytes(“UTF-8”));
как-то не помогло(почему-то вместо текста выводит знаки вопроса
“если data будет равна 0 то это значит, что файл пуст”
тогда, возможно, правильней будет “while(data > 0)”, а то зациклит при пустом файле…
В комментарии опечатка. Правильно «если data будет равна -1 то это значит, что файл пуст»
https://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html
Method Detail:
read
Returns:
the next byte of data, or -1 if the end of the file is reached.
да и можно немного рассказать в чем же разница между FileInputStream и InputStream, а то по примерам действительно непонятно
InputStream является родителем класса FileInputStream, поэтому InputStream имеет не все методы, которые есть в классе FileInputStream.