Робота з файлами

Спочатку необхідно зрозуміти, як правильно записувати шлях до файлу. Є два основні типи шляхів: абсолютний та відносний. Абсолютний шлях — це повний довгий шлях до файлу на комп’ютері, включаючи всі папки та навіть диск, наприклад, D:\\папка\\файл.txt на Windows (важливо, якщо записувати шлях як String, то треба подвійний бекслеш — \\) або /папка/файл на UNIX/Linux. Відносний шлях — короткий, відносно папки, у якій працює зараз програма, наприклад, файл.txt (якщо програма скомпільована на диску, а файл в цій же папці) або src/файл.txt (якщо запускати код в IDE, а файл в “src”). Можна використовувати обидва, однак щодо файлів, які знаходяться в самій програмі (проєкті), я раджу використовувати метод getResource(String path).getPath(). Для представлення файлу в Java є клас File, при створенні якого треба вказати шлях у вигляді тексту:

File f1 = new File("C:\\Users\\Вася\\Desktop\\file1.txt");
File f2 = new File("src/file2.txt");
File f3 = new File(Main.class.getResource("file3.txt").getPath()); //Файл поряд з класом Main

Важливо: можна вказувати шлях до папок, які також вважаються файлами, або писати шлях до неіснуючих файлів.

Основні операції

У Java є безліч зручних методів для роботи з файлами, основі з них вказані тут:

Метод Повертає Для чого
exists() boolean Перевірити, чи файл існує
createNewFile() void Створити файл (якщо існує — файл очиститься)
mkdir() void Створити папку
length() int Отримати довжину (кількість символів) файлу
renameTo(File newFile) void Перемістити або перейменувати файл
delete() void Видалити файл
isDirectory() boolean Перевірити, чи це папка
isFile() boolean Перевірити, чи це файл
getName() String Отримати ім’я файлу
getPath() String Отримати відносний шлях до файлу
getAbsolutePath() String Отримати абсолютний шлях до файлу
toAbsoluteFile() File Перетворити File в такий же з абсолютним шляхом
listFiles() File[] Отримати масив файлів і папок у даній папці

Інші методи, як і з іншими класами, можна подивитись в офіційному Java 20 API.

Читання файлів

Наскільки я пам’ятаю, шкільна програма, як і цей сайт, розраховані лише на основи програмування на Java, тому працювати ми будемо лише з текстовими файлами, а не документами, фотографіями тощо.

Є багато способів прочитати файл, але ми використаємо найпростіший через клас FileReader: потрібно створити його об’єкт та вказати або File, або String-шлях до файлу, а потім створити Scanner цього “читача”:

FileReader fr = new FileReader(f1);
Scanner sc = new Scanner(fr);

Далі можна читати рядок-за-рядком весь файл вже звичним методом nextLine(). Але як знати, коли файл вже закінчився і нічого більше читати, щоб не виникла помилка? Для перевірки, чи є наступний рядок у файлі, є метод hasNextLine(), то ж, наприклад, можна використати цикл “поки є наступний рядок, прочитати його”:

while (sc.hasNextLine())
	System.out.println( sc.nextLine() );

Наприкінці, коли ми закінчили працювати з файлом, потрібно закрити його методом close():

fr.close();

Запис до файлів

Для запису до файлів є аналогічний клас FileWriter: так само створити файл, однак другим аргументом вказати false якщо Ви бажаєте перезаписати файл (стерти все спочатку, якщо в ньому щось було), або true якщо хочете дописати (в кінці) текст, записати методом write(String str) і врешті закрити файл. Зауважте, що можна записати одразу декілька рядків, розділивши їх символами \r\n на Windows або \n на UNIX/Linux.

FileWriter fw = new FileWriter(f2, false);
fw.write("Це перший рядок,\nа це — другий.");
fw.close();

Copyleft 🄯 2020–2024 Михайло Стецюк <yaBobJonez@gmail.com>.
Сайт має ліцензію Creative Commons License.
Дякую рідній школі та вчителям!