Java: работа с файлове - запис, четене, изтриване

Anonim

Java има много инструменти за работа с файлове, тъй като те служат за съхранение на данни в много програми. Особено често се изисква достъп до файлове в Java Android. Всички класове за работа с файлове се намират в пакета java.io, където се съхраняват класове за работа с входни и изходни потоци. Строго погледнато, в Java работата с файлове се осъществява предимно чрез байтови и символни I / O потоци. Изключение в този случай е клас Файл. Да започнем с него.

Файл Java клас - работа с файлове

Класът Файл взаимодейства директно с файловете и файловата система. Екземпляр от този клас се използва предимно за достъп до свойствата на файла и придвижване в йерархията на поддиректории. Той не дефинира начини за извличане и запазване на данни във файл, но с помощта на този клас можете да получите много информация за самия файл: дата, час, права за достъп и пътека на директорията. По същество класът File е интерпретация на обект на файл или директория в Java.

За да създадете екземпляр от клас Файл, използвайте един от неговите конструктори: Файл (Пътна пътека, String file name).

Разгледайте основните методи на този клас, позволяващи да получите информация за файл или директория:

  • getName () - връща името на файла;
  • exist () - връща булева стойност true, ако файлът съществува, или false в противен случай;
  • isFile () - определя дали обектът сочи към файл, връщайки съответната логическа стойност;
  • isDirectory () - връща true, ако това е папка;
  • canWrite () - връща true, ако файлът е записваем;
  • canRead () - връща true, ако файлът е четим;
  • setReadOnly () - прави файла само за четене;
  • length () - връща размера на файла в байтове;
  • renameTo (Файл ново име) - преименува текущия файл според предадения аргумент. Връща true, ако операцията е успешна;
  • delete () - изтрива файла или папката (ако е празна), посочена от повикващия;
  • list () - извлича списък с имена на обекти, съхранени в тази директория, като масив от низове (важи само за директории).

По този начин, използването на класа Файл в Java осигурява работа с файлове и папки.

Работа с файлове чрез класовете FileInputStream и FileOutputStream

По-рано споменахме, че в Java работата с файлове се извършва предимно чрез входно-изходни потоци. Байтни потоци за работа с файлове са представени под формата на класовете FileInputStream и FileOutputStream. Тези класове са наследници на базовите абстрактни класове InputStream и OutputStream, съответно, така че методите на тези класове са достъпни за работа с файлове.

Помислете първо за FileInputStream. Конструкторите от този клас са показани на фигурата по-долу:

Първият конструктор приема като аргумент пътя към целевия файл като низ, а вторият като обектно представяне. Въпреки че първият конструктор се използва по-често, във втория случай е възможно да се проверят свойствата на файла, като се използват методи, налични в класа File. Когато създавате екземпляр от класа, FileInputStream отваря поток от входни данни за четене на файла.

Конструкторите за класа FileOutputStream са показани по-долу:

Ситуацията е подобна на FileInputStream, но може да приеме и логическата стойност “append”, която при true означава, че данните, записани в целевия файл, ще бъдат добавени към съществуващите и ако е false, файлът ще бъде напълно презаписан, т.е. старите данни няма да бъдат запазени.

Да вземем пример с тези класове:

Входният поток FileInputStream чете данни от file1.txt файл по байт, използвайки метода read (). Всяко четене на байт се съхранява в променлива в цяло число. След това, в тялото на while цикъла, тази променлива се предава като аргумент на метода на запис на екземпляра FileOutputStream, който записва получения байт във файла file2.txt. Накрая, двата потока задължително се затварят, използвайки метода на затваряне.

Класове FileReader и FileWriter

Ако знаете, че ще се занимавате с текст при работа с файлове, тогава има смисъл да използвате символни потоци вместо байтови потоци. Тези потоци са представени от класовете FileReader и FileWriter в Java. Работата с файлове с помощта на тези класове е почти същата като в предишния случай. Те са потомци на класовете Reader и Writer, съответно, които определят основните методи за въвеждане и извеждане на данни.

Конструкторите за класовете FileReader и FileWriter са показани на фигурата по-долу:

Съгласен съм, че практически няма разлики в семантиката в сравнение с байтовите потоци. Долната линия е, че тези класове са проектирани специално за работа с символи в Unicode, които байтовите потоци не могат да направят. Така е организирана обработката на файлове в Java. Пример за използване на тези класове е даден по-долу:

Както виждате, няма разлики. Струва си да се отбележи, че въпреки че потоците са символични, методът за четене се връща и методът на запис заема цяло число. Въпреки че подписът на метода на запис предполага приемане на аргумент от тип int, само по-ниските 16 бита се записват в потока, тъй като символите в Java са представени с толкова много битове.

заключение

И така, подредихме основните класове за работа с файлове в Java. Заслужава да се отбележи, че ако ще разработвате софтуер за Java Android, можете спокойно да използвате този инструментариум.