Adresář dokumentů v mobilní aplikaci — co to je, účel a jak organizovat ukládání

Autor: IT Sectr Publikováno: 2026-03-14 Doba čtení: 10 min

Adresář dokumentů aplikace je trvalé úložiště uživatelských souborů, které by měly být zachovány mezi relacemi a obnoveny ze zálohy. Podle Apple File System Programming Guide, 2026 je na iOS adresář Documents automaticky zahrnut do zálohy iCloud, na rozdíl od mezipaměti a dočasných adresářů. Správné použití adresáře dokumentů zaručuje, že uživatelské soubory nebudou ztraceny při aktualizaci nebo přeinstalaci aplikace.

Hlavní body

  • Documents Directory — trvalé úložiště uživatelských souborů, které jsou zachovány při aktualizacích a obnově ze zálohy
  • iOS automaticky zahrnuje Documents do zálohy iCloud a iTunes — vylučte pouze data, která lze znovu vytvořit
  • Android nemá samostatný adresář Documents — ekvivalentem je context.filesDir s ručním správou záloh
  • Automatické ukládání a verzování souborů zabraňují ztrátě dat při selháních a náhodném přepsání
  • Migrace dat při aktualizaci verze aplikace je povinná pro zabránění ztrátě uživatelských nastavení a souborů

Co je adresář dokumentů aplikace?

Adresář dokumentů — specializované úložiště v sandboxu aplikace určené pro trvalé ukládání uživatelských souborů. Na rozdíl od mezipaměti jsou soubory v tomto adresáři považovány za důležité pro uživatele: nejsou systémem mazány při nedostatku místa, jsou zachovány při aktualizaci aplikace a jsou zálohovány při synchronizaci zařízení. Na iOS je adresář Documents součástí Sandbox kontejneru a je automaticky zahrnut do zálohy iCloud. Na Androidu neexistuje přímý ekvivalent — ekvivalentem je context.filesDir, který je také určen pro trvalé soubory, ale nemá vestavěný mechanismus zálohování.

Rozdíl mezi adresářem dokumentů a interním úložištěm (Internal Storage) na Androidu je minimální: oba jsou v sandboxu aplikace, oba jsou smazány při odinstalaci, oba jsou nepřístupné jiným aplikacím. Hlavní rozdíl je sémantický: Documents Directory předpokládá, že soubory byly vytvořeny nebo importovány uživatelem, zatímco Internal Storage může obsahovat interní soubory aplikace (databáze, konfigurace). Na iOS je rozdíl významnější: Documents je automaticky zálohován, zatímco Library/Application Support nikoli. To ovlivňuje strategii ukládání: do Documents umisťujte pouze to, co chce uživatel obnovit na novém zařízení, a do Application Support — interní data, která může aplikace znovu vytvořit.

Architektura sandboxu zaručuje, že jiné aplikace nemají přístup k adresáři dokumentů vaší aplikace. Na iOS je přístup k Documents jiných aplikací nemožný bez jailbreaku. Na Androidu root přístup umožňuje číst filesDir libovolné aplikace, proto důvěrná data (tokeny, šifrovací klíče) musí být dodatečně chráněna pomocí EncryptedSharedPreferences nebo EncryptedFile z knihovny AndroidX Security.

Jaká data se ukládají v adresáři dokumentů

V adresáři dokumentů by měla být umístěna data, která mají pro uživatele hodnotu a měla by být dostupná po restartu aplikace nebo obnovení zařízení. Ne všechny soubory jsou vhodné pro ukládání v tomto adresáři — výběr závisí na typu dat a scénáři použití.

Uživatelské dokumenty a soubory

Uživatelské soubory — hlavní obsah adresáře dokumentů. Mohou to být textové dokumenty vytvořené v editoru, obrázky pořízené kamerou aplikace, exportované PDF zprávy, audio nahrávky, poznámky. Každý takový soubor byl vytvořen uživatelem nebo na jeho žádost a měl by být kdykoli k dispozici. Na iOS jsou soubory z Documents zobrazeny v systémové aplikaci Files, což umožňuje uživateli spravovat je pomocí standardního správce souborů. Na Androidu neexistuje podobné zobrazení — aplikace musí sama poskytnout rozhraní pro prohlížení uložených souborů.

Databáze a nastavení aplikace

SQLite databáze a konfigurační soubory jsou obvykle ukládány vedle adresáře dokumentů, ale ne v něm samotném. Na iOS jsou databáze umístěny v Library/Application Support, protože by se neměly zobrazovat v aplikaci Files a samostatně zálohovat. Na Androidu jsou databáze standardně vytvářeny v /data/data/<package>/databases/ pomocí Room nebo SQLiteOpenHelper. Pokud databáze obsahuje uživatelský obsah (poznámky, deník, finanční záznamy), lze ji umístit do filesDir pro zajištění zálohování prostřednictvím systému. Room umožňuje určit vlastní adresář pro ukládání databáze pomocí callbacku RoomDatabase.Builder.

kotlin
val dbFile = File(context.filesDir, "user_database.db")

val db = Room.databaseBuilder<AppDatabase>(
    context,
    dbFile.absolutePath
).build()

Exportovaná a importovaná data

Soubory, které uživatel importuje z jiných aplikací nebo exportuje z vaší aplikace, by měly být také uloženy v adresáři dokumentů. Na iOS import prostřednictvím UIDocumentPickerViewController automaticky umístí kopii souboru do Documents při použití parametru asCopy: true. Na Androidu import prostřednictvím dialogu SAF také vytvoří kopii souboru v sandboxu aplikace. Při exportu dat (například vytvoření CSV souboru s kontakty) nejprve uložte soubor do Documents/filesDir a poté nabídněte uživateli sdílení prostřednictvím Share Sheet. To zaručuje, že i když uživatel zapomene soubor uložit po odeslání, kopie zůstane v aplikaci pro pozdější použití.

Jak pracovat s adresářem dokumentů na Androidu

Na Androidu funkce adresáře dokumentů plní context.filesDir. Dále je k dispozici adresář context.externalFilesDir na SD kartě, ale nezaručuje zachování dat. Pojďme prozkoumat hlavní techniky práce s těmito adresáři.

Přístup a správa souborů přes filesDir

filesDir — hlavní adresář pro trvalé soubory aplikace na Androidu. Nachází se v sandboxu aplikace a je zcela smazán při odinstalaci. Pro získání instance File použijte context.filesDir, který vrací cestu k adresáři /data/data/<package>/files/. Pro vytváření a čtení souborů použijte standardní File operace v Javě/Kotlinu nebo metody Context openFileInput() a openFileOutput(), které přijímají název souboru a vracejí FileInputStream/FileOutputStream. Metoda openFileOutput() automaticky vytvoří soubor ve filesDir, pokud ještě neexistuje, a umožňuje určit režim přístupu: MODE_PRIVATE (pouze aktuální aplikace), MODE_APPEND (připisování) nebo MODE_WORLD_READABLE (zastaralé, nepoužívá se od API 24+).

kotlin
val fileName = "report.pdf"
val content = "PDF content".toByteArray()

context.openFileOutput(fileName, Context.MODE_PRIVATE).use { stream ->
    stream.write(content)
}

val bytes = context.openFileInput(fileName).use { stream ->
    stream.readBytes()
}

Vlastnosti ukládání na Android 10+

Na Android 10+ model Scoped Storage neovlivňuje filesDir — přístup k vlastnímu sandboxu aplikace zůstává plný. Všechny operace čtení a zápisu v filesDir nevyžadují další oprávnění. Při pokusu o přístup k souborům jiné aplikace přes filesDir však obdržíte výjimku. Pro výměnu souborů použijte FileProvider, který vytváří dočasný content URI pro přenos souboru do jiné aplikace. FileProvider se deklaruje v AndroidManifest.xml pomocí tagu <provider> a konfiguruje se v XML souboru cest. Toto je standardní mechanismus pro přenos souborů mezi aplikacemi, používaný například při odesílání obrázku přes Intent s ACTION_SEND.

Jak pracovat s adresářem dokumentů na iOS

Na iOS je Documents Directory součástí Sandbox kontejneru aplikace se zvláštním statusem. Soubory z tohoto adresáře jsou automaticky zahrnuty do zálohy iCloud, zobrazeny v aplikaci Files a zachovány při aktualizaci aplikace přes App Store.

Documents Directory a zálohování

Automatické zálohování Documents — klíčová výhoda iOS. Když uživatel připojí zařízení k iTunes nebo zapne iCloud Backup, všechny soubory z Documents/ jsou zkopírovány do zálohy. Při obnově na novém zařízení uživatel obdrží všechny své soubory bez dalších akcí. Tato výhoda se však stává nevýhodou, pokud aplikace ukládá velké objemy dat v Documents: doba zálohování se prodlužuje a úložiště iCloud může rychle dojít. Proto by v Documents měly být ukládány pouze soubory, které uživatel skutečně potřebuje při obnově. Dočasné soubory, mezipaměť a znovu vytvořitelná data by měla být v Caches nebo Library/Application Support. Apple doporučuje vyloučit ze zálohování soubory, které lze znovu stáhnout z internetu, pomocí atributu isExcludedFromBackup.

swift
let fm = FileManager.default
let docsURL = fm.urls(
    for: .documentDirectory,
    in: .userDomainMask
).first!

let fileURL = docsURL.appendingPathComponent("notes.txt")
let text = "Obsah poznámky"
try text.write(to: fileURL, atomically: true, encoding: .utf8)

iCloud Drive a synchronizace mezi zařízeními

iCloud Drive umožňuje synchronizaci souborů z Documents mezi zařízeními stejného uživatele. Pro aktivaci synchronizace by aplikace měla používat API NSDocument nebo UIDocument, která automaticky spravují verzování a řešení konfliktů. Alternativní přístup — použití iCloud s CloudKit, který poskytuje flexibilnější kontrolu nad synchronizací, ale vyžaduje konfiguraci na CloudKit Dashboard. Při použití iCloud Drive se ujistěte, že správně zpracováváte editační konflikty (merge nebo last-write-wins) a informujete uživatele o stavu synchronizace prostřednictvím rozhraní aplikace. iCloud nezaručuje okamžitou synchronizaci — zpoždění může být od několika sekund do několika minut v závislosti na velikosti souboru a kvalitě připojení. Pro kriticky důležitá data používejte transakční zápis a verzování, aby bylo možné při konfliktu obnovit předchozí verzi souboru.

Rozdíly od Cache Directory a nejlepší postupy

Správná volba mezi Documents Directory a Cache Directory určuje spolehlivost ukládání uživatelských dat. Chyba ve volbě vede buď ke ztrátě dat (pokud jsou důležité soubory uloženy v mezipaměti), nebo k přeplnění zálohy (pokud jsou dočasné soubory uloženy v Documents).

KritériumDocuments DirectoryCache Directory
Záruka zachováníVysoká — není mazáno systémemNízká — může být vyčištěno
Zálohování (iOS)Automaticky v iCloudNezálohuje se
Viditelnost uživateli (iOS)V aplikaci FilesSkryté
Čištění při aktualizaciNečistí seMůže být vyčištěno
Doporučená velikostJakákoli, ale s kontrolou přes nastaveníDo 100–200 MB
Typ datUživatelské souboryDočasná znovu vytvořitelná data

Nejlepší postupy použití adresáře dokumentů zahrnují několik klíčových pravidel. Za prvé, vždy žádejte potvrzení uživatele před smazáním souborů z tohoto adresáře. Na rozdíl od mezipaměti může smazání dokumentu vést k nenávratné ztrátě uživatelského obsahu. Za druhé, implementujte verzování souborů: při přepisování existujícího souboru zachovejte předchozí verzi s příponou _backup nebo použijte Snapshot mechanismy. Za třetí, poskytněte uživateli rozhraní pro prohlížení, přejmenování, mazání a export souborů z adresáře dokumentů. Na iOS jsou soubory z Documents automaticky zobrazeny v Files, na Androidu je třeba implementovat vlastního správce souborů nebo použít knihovny třetích stran.

Zvláštní pozornost věnujte migraci dat při aktualizaci aplikace. Pokud nová verze mění strukturu ukládání souborů (například přesouvá data z jednoho podadresáře do druhého nebo mění formát souborů), implementujte jednorázovou migraci při prvním spuštění po aktualizaci. Ukládejte číslo verze schématu dat v SharedPreferences a při neshodě spusťte migraci. Neodstraňujte staré soubory do dokončení migrace — v případě selhání by uživatel neměl ztratit data. Pokud migrace zahrnuje konverzi formátu (například přechod z JSON na SQLite), uchovejte původní soubory jako zálohu v samostatném adresáři s datem migrace. Uživatel by měl mít možnost vrátit změny prostřednictvím nastavení aplikace během prvních 30 dnů po aktualizaci, jak doporučuje Apple Human Interface Guidelines.

Často kladené otázky

Jaký je rozdíl mezi Documents a Library/Application Support na iOS?

Documents se zobrazuje v aplikaci Files a automaticky se zálohuje v iCloud. Application Support se nezobrazuje v Files a standardně se nezálohuje. Zvolte Application Support pro interní data aplikace, která není třeba uživateli zobrazovat.

Je nutné čistit adresář dokumentů při mazání účtu?

Ano, při mazání účtu nabídněte uživateli vyčištění všech místních souborů spojených s tímto účtem. Zobrazte dialog s otázkou „Smazat všechna místní data?” a vyjmenujte, které soubory budou ovlivněny. Toto je požadavek GDPR a souladu s politikami App Store a Google Play.

Jak přenést soubory z adresáře dokumentů na nové zařízení?

Na iOS stačí obnovit zařízení ze zálohy iCloud nebo iTunes — soubory z Documents se obnoví automaticky. Na Androidu použijte Google Drive Backup API pro zálohování souborů z filesDir nebo implementujte export prostřednictvím cloudové služby.

Může uživatel náhodně smazat soubory z adresáře dokumentů?

Na iOS může uživatel smazat soubory prostřednictvím aplikace Files. Na Androidu je mazání možné pouze prostřednictvím rozhraní vaší aplikace. Doporučuje se implementovat koš pro dokumenty s možností obnovení do 30 dnů od smazání, aby se zabránilo náhodné ztrátě dat.

Jak zajistit zachování souborů při aktualizaci aplikace?

Nejsou vyžadována žádná další opatření — iOS a Android automaticky zachovávají adresář dokumentů při aktualizaci přes App Store nebo Google Play. Při změně struktury ukládání však implementujte migraci dat při prvním spuštění nové verze, zkontrolováním čísla verze schématu v nastavení.

Shrnutí

  • Documents Directory — trvalé úložiště uživatelských souborů, chráněné před systémovým čištěním a zálohované na iOS přes iCloud
  • iOS automaticky zálohuje Documents, zobrazuje jej v aplikaci Files a obnovuje obsah při obnově zařízení
  • Android používá context.filesDir jako ekvivalent — soubory jsou zachovány při aktualizaci, ale nemají vestavěný mechanismus zálohování
  • Do adresáře dokumentů umisťujte uživatelské soubory, exportovaná data a databáze s uživatelským obsahem — vše, co by mělo přežít přeinstalaci aplikace
  • Mezipaměť, dočasné soubory a znovu vytvořitelné zdroje ukládejte do Cache Directory, abyste nepřeplnili zálohu a neriskovali ztrátu dat při systémovém čištění
  • Migrace dat při aktualizaci verze je povinná: zkontrolujte verzi schématu, spusťte přenos dat a uchovejte zálohu staré verze pro možnost vrácení
  • Koš pro dokumenty s 30denní dobou uchování zabraňuje náhodné ztrátě uživatelských souborů a splňuje požadavky HIG a Material Design

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také