Нативная разработка мобильных приложений


 Файлы Чтение и запись данных в файлы



Download 3,69 Mb.
Pdf ko'rish
bet81/228
Sana21.07.2022
Hajmi3,69 Mb.
#834838
1   ...   77   78   79   80   81   82   83   84   ...   228
Bog'liq
Нативная разработка мобильных приложений

122

Файлы
Чтение и запись данных в файлы
Для чтения и записи данных в файлы существуют простые удобные способы, 
поддерживаемые для некоторых объектов в фреймворке Foundation и стан
-
дартной библиотеке Swift Standard Library, в том числе 
String
и 
Data
. Напри
-
мер, вот как можно прочитать содержимое текстового файла 
file.txt
из каталога 
Documents
приложения в строковый объект:
let file =
try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask,
appropriateFor: nil, create: false)
.appendingPathComponent("file.txt")
// Прочитать файл в строку
let contents = try? String(contentsOf: file, encoding: .utf8)
Запись в файл производится аналогично и требует вызова 
write(to:atomically: 
encoding:)
, например:
let file =
try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask,
appropriateFor: nil, create: false)
.appendingPathComponent("file.txt")
// Прочитать файл в строку
var contents = try? String(contentsOf: file, encoding: .utf8)
...
// Записать строку обратно в тот же файл 
try? contents.write(to: file, atomically: false, encoding: .utf8)
Поддержка операций с файлами для объекта 
Data
почти не отличается. Это 
объекты, предназначенные для доступа к данным в форме байтов данных, по 
аналогии с массивами байтов в стиле языка C. Например, допустим, у вас есть 
URL файла изображения; вы можете прочитать изображение в память и запи
-
сать изображение на диск, как показано здесь:
// Прочитать данные из файла в объект Data 
var data = try? Data(contentsOf: imageFileUrl)
...
// Записать данные обратно в тот же файл
try? data?.write(to: imageFileUrl)
Все дороги ведут в FileManager
Рано или поздно, разрабатывая приложения для iOS, вам потребуются более 
сложные операции с файлами. Для этих случаев существует универсальный 
класс 
FileManager
, предлагающий обобщенный поточно-ориентированный под
-
ход к реализации сложных операций с файлами.
Для чтения того же файла 
file.txt
с использованием 
FileManager
придется до
-
бавить дополнительную логику:
// Получить ссылку на файл в каталоге Documents
let file =
try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask,


iOS 

123
appropriateFor: nil, create: false)
.appendingPathComponent("file.txt")
// Прочитать содержимое файла в объект Data 
if let contents = FileManager.default.contents(atPath: file.path) {
// Преобразовать исходные данные в строку String
let contentsString = String(data: contents, encoding: .utf8)!
print(contentsString)
}
Первое, на что следует обратить внимание, – это использование 
file.path
для преобразования объекта URL в строковое представление абсолютного пути 
к файлу в файловой системе; это необходимо из-за неполной поддержки URL 
в 
FileManager
. Затем оператор 
if
let
читает содержимое файла в объект дан
-
ных. Это обеспечивает некоторую защиту от пустых значений, если 
FileManager
не сможет найти или получить доступ к запрошенному файлу. Наконец, если 
предположить, что файл доступен, из объекта данных создается экземпляр 
строки с использованием указанной кодировки – в данном примере UTF-8. 
Запись в файл выполняется аналогично. Вот как можно записать строку 
в файл с использованием 
FileManager
:
let example = "I love tacos."
// Преобразовать строку в объект Data
let exampleData = example.data(using: .utf8)
// Создать файл, используя объект данных (или затереть существующий файл)
FileManager.default.createFile(
atPath: sharedFile.path, contents: exampleData, attributes: nil) // вернет Bool
Успех операции с файлом определяется логическим значением 
true
или 
false
, возвращаемым вызовом 
createFile(atPath:contents:attribute:)
. Этот спо
-
соб отличается от применения более современного оператора 
throws
в Swift, 
который использует 
String
и 
Data
напрямую.
Но зачем использовать устаревший способ на основе 
FileManager
(он по
-
явился в фреймворке Foundation намного раньше, чем стандартная библио
-
тека Swift), который к тому же более громоздкий, если сравнивать с методами 
экземпляров 
Data
и 
String
? Ответ заключается в назначении 
FileManager
. Класс 
FileManager
лучше подходит для реализации более сложных взаимодействий 
с файлами и каталогами, для исследования иерархии каталогов, проверки су
-
ществования, удаления, перезаписи, обновления атрибутов файлов и многого 
другого. Но он не так хорош для простых операций чтения и записи данных.

Download 3,69 Mb.

Do'stlaringiz bilan baham:
1   ...   77   78   79   80   81   82   83   84   ...   228




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish