Новини високих технологій
» » Як здійснити запис у файл Java

Як здійснити запис у файл Java

22-01-2018, 21:00
1 445
При написанні програм на мові Java рано чи пізно постане необхідність читання і запису інформації в файл. Для цього в мові передбачені наступні інструменти для введення і виведення даних: клас Writer для запису і Reader для читання. Спадкоємцями цих класів є класи FileWriter і FileReader, зручні для роботи безпосередньо з файлами.

Простий приклад запису у файл в Java

Перед тим як створювати точку входу в програму, потрібно прописати імпорти (необхідні класи знаходяться в бібліотеки java.io*, пропишемо зірочку, т. к. в подальшому знадобляться ще класи з цієї бібліотеки). Імпорт в редакторі повинен мати такий вигляд:


import java.io.*;

Потім всередині довільного класу пишемо метод main, в якому в свою чергу створюємо екземпляр класу FileWriter і записуємо його в змінну write:

FileWriter writer = new FileWriter("text.txt");

При запуску цієї програми буде створений файл text.txt в корені проекту. Для того щоб записати що-небудь в цей файл, потрібно звернутися до методу write() класу Writer, метод write() приймає в якості аргументу рядок, напишемо туди що-небудь:

writer.write("приклад запису у файл в Java");

При роботі з введенням виведенням даних необхідно також враховувати виняткові ситуації з причини того, що ми не завжди знаємо, що буде в цих даних. Компілятор не пропустить цей код без спеціальної конструкції throws Exception, яку потрібно вставити в сигнатурі методу main. Також потрібно подбати про вихід з потоку, після методу write() потрібно закрити потік за допомогою методу close(). Як повинен виглядати код на цьому етапі, показано на малюнку нижче.

<script async="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js">
<!-- fb_336x280_2 -->

<script> (adsbygoogle = window.adsbygoogle ||[]).push({});

При запуску програми в корені проекту з'явиться файл text.txt, в якому буде написано "приклад запису у файл в Java". Однак цей приклад годиться лише для ознайомлювальних цілей, щоб застосувати його в "бойових" умовах потрібно провести невеликий рефакторинг.

Рефакторинг

Перше, що потрібно зробити, - укласти код, що відповідає за введення виведення даних в конструкцію try - catch (так легше управляти винятками і застосовувати свої винятки). Потім потрібно створити окрему змінну з типом File, куди можна записати адресу та назву файлу (це зручно, т. к. часто потрібно працювати з декількома файлами, їх поміщають в окремі змінні і обробляють циклом, і тільки потім результуюча змінна вставляється як параметр в FileWriter).

Також хорошою практикою при роботі з потоками вводу/виводу вважається використання буфера (клас FileWriter звертається до диска, якщо багато це може зажадати багато пам'яті, тому розумно маніпулювати даними, використовуючи буфер), для цього застосовується клас BufferedWriter, а FileWriter записується в дужках в якості параметра. Для звільнення буфера викликається метод flush(), його можна прописати перед методом close(), тепер код буде виглядати так, як показано нижче.

Як записати Java в файл порядково

Кожен раз при компіляції даного коду в консолі буде перезаписуватися одна і та ж запис. Як зробити так, щоб при запуску програми в файл записувалася нова інформація порядково? Для цього в першу чергу потрібно написати ключове слово true другим параметром при створенні FileWriter:


<script type="text/jаvascript">
var blockSettings2 = {blockId:"R-A-70350-2",renderTo:"yandex_rtb_R-A-70350-2",async:!0};

if(document.cookie.indexOf("abmatch=") >= 0){
blockSettings2 = {blockId:"R-A-70350-2",renderTo:"yandex_rtb_R-A-70350-2",statId:70350async:!0};
}

!function(a,b,c,d,e){a[c]=a[c]||[],a[c].push(function(){Ya.Context.AdvManager.render(blockSettings2)}),e=b.getElementsByTagName("script")[0],d=b.createElement("script"),d.type="text/jаvascript",d.src="//an.yandex.ru/system/context.js",d.async=!0e.parentNode.insertBefore(d,e)}(this,this.document,"yandexContextAsyncCallbacks");

BufferedWriter writer = new BufferedWriter(new FileWriter(myFile, true));

Кожен раз при компіляції програма буде записувати в файл рядок, яка знаходиться в методі write(), без перенесення на наступний рядок. У нашому випадку вийшло так:

приклад запису в Java приклад запису в Java приклад запису в Java

Простий спосіб переносу рядка - це додавання оператора /n до строковому аргументу методу write(), однак такий спосіб не буде працювати в різних операційних системах. Для того щоб записати файл порядково на різних платформах, потрібно використовувати метод line.separator класу System. У наступному прикладі видно, як цей метод записати в змінну lineSeparator, яку потім можна використовувати у строковому аргумент методу write():


String lineSeparator = System.getProperty("line.separator"); Остаточно код буде виглядати так, як показано нижче.
Результат виконання цього коду буде наступним: у файлі text.txt при триразовому запуску програми з'являться рядки "приклад запису в Java".
Цікаво по темі
Asterisk: установка та інструкція
Asterisk: установка та інструкція
Asterisk – одне з кращих рішень в області IP-телефонії, яке можна використовувати безкоштовно. Asterisk досить простий у використанні, і для нього
Робота з файловими об'єктами: функція open, читання і запис у файли в Python
Робота з файловими об'єктами: функція open, читання і запис у файли в Python
Файли належать до базових типів даних мови Python. Це сполучний інтерфейс між кодом і іменованими областями пам'яті комп'ютера. Файли виконують
Перша програма на Java - Hello World
Перша програма на Java - Hello World
Як написати свою першу програму на Java. Приклад вихідного коду найпростішого Hello World на Java. Опис методів і класу.
Java: робота з файлами - запис, читання, видалення
Java: робота з файлами - запис, читання, видалення
Переважна більшість програм, написаних на Java, так чи інакше взаємодіють з файлами, зберігаючи і дістаючи звідти потрібну інформацію. Для операцій з
BigInteger Java: робота з великими числами
BigInteger Java: робота з великими числами
Для роботи з числами, які не можуть зберігається в стандартних примітивних типів, в Java є спеціальний клас BigInteger. Він не тільки інкапсулює їх
Java: InputStream. Потоки введення
Java: InputStream. Потоки введення
У даній статті ми розглянемо базовий клас для потоків вводу даних в Java - InputStream. Розберемо основну його функціональність і реалізації, які