Робота з файлами
Спочатку необхідно зрозуміти, як правильно записувати шлях до файлу. Є два основні типи шляхів: абсолютний та відносний. Абсолютний шлях — це повний довгий шлях до файлу на комп’ютері, включаючи всі папки та навіть диск, наприклад, 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();