Práce se soubory v Javě

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Doplnění zápisu obsahu souborů a serializace)
m (Opraven vzhled, ponecháno pouze pro manipulaci se soubory.)
 
(Není zobrazeno 9 mezilehlých verzí od 1 uživatele.)
Řádka 1: Řádka 1:
[[Category:VSE]]
+
[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Java]]
[[Category:Informatika]]
+
[[Category:Programování]]
+
 
+
Pro podrobnější přehled o způsobech zápisu si pročtete [http://download.oracle.com/javase/tutorial/essential/io/file.html tutoriál ze stránek firmy Oracle].
+
  
 
== Manipulace se soubory ==
 
== Manipulace se soubory ==
  
=== Třída <code>java.io.File</code> ===
+
<div class="Poznamka">V nově vytvářených projektech zvažte použití
 +
[http://download.oracle.com/javase/tutorial/essential/io/legacy.html rozhraní (interface) <code>java.nio.file.Path</code> a třídy <code>java.nio.file.Files</code>] (vyžaduje Java SE 7).</div>
 +
 
 +
== Třída <code>java.io.File</code> ==
 
* odkazuje na soubor jako celek
 
* odkazuje na soubor jako celek
 
* reprezentuje vlastně název souboru a cestu k němu (nikoli data souboru)
 
* reprezentuje vlastně název souboru a cestu k němu (nikoli data souboru)
* vytvoření odkazu na soubor/cestu
 
*:<code>File vystupniSoubor = new File(nazevSouboru.pripona);</code>
 
-----
 
* vytvoření, zjištění informací
 
** boolean createNewFile()
 
** boolean dbFile.exists()
 
** boolean createNewFile()
 
** boolean isDirectory()
 
** long length()
 
-----
 
* operace se soubory (celými, nikoli s daty v nich)
 
** renameTo(File novy)
 
** delete()
 
-----
 
* Práce s adresáři (protože adresář je také speciální soubor)
 
** File[] listFiles()
 
** mkdir(File nazev)
 
 
== Přístup k obsahu souboru ==
 
  
* Pro přístup k obsahu souboru se v Javě používají vstupně-výstupní proudy (angl. ''stream'').
+
== Vytvoření odkazu na soubor/cestu ==
* Vstupní (výstupní) proud je vlastně třída, která umožňuje zapisovat (číst) data z (do) souboru.
+
* <code>File vystupniSoubor = new File(nazevSouboru.pripona);</code>
  
=== Příklady ===
 
* binární data (obecná data, tedy libovolná posloupnost byte)
 
** FileOutputStream
 
** FileInputStream
 
* textová data
 
** BufferedWriter
 
** BufferedWriter
 
  
== Serializace ==
+
== Vytvoření a ověření existence souboru ==
 +
* <code>boolean createNewFile()</code>
 +
* <code>boolean dbFile.exists()</code>
 +
* <code>boolean createNewFile()</code>
 +
* <code>boolean isDirectory()</code>
 +
* <code>long length()</code>
  
=== Co je to serializace? ===
 
* V objektovém programování pracujeme s objekty, které obsahují atributy.
 
* Data souboru na disku jsou tvořena posloupností byte. Je na aplikaci, aby věděla, co tyto byte znamenají. Objekty do souborů ukládat přímo nelze.
 
* Pokud do souboru chceme ukládat složitější data (objekty), musí je naše aplikace převést na posloupnost byte.
 
* Převod můžeme provést vlastními prostředky, ale musíme si pro to naprogramovat patřičné metody.
 
* Výhodnější je nechat převod na Javě. Můžeme k tomu využít tzv. serializaci, tedy automatický převod objektů na posloupnosti byte.
 
  
=== Jak serializace funguje? ===
+
== Operace se soubory ==
* Třída, jejíž instance chceme ukládat do souboru, musí implementovat rozhraní <code>Serializable</code>.
+
* <code>renameTo(File novy)</code>
* Pro převod instance na posloupnost byte při zápisu použijeme třídu <code>ObjectOutputStream</code> pro zpětný převod při čtení třídu <code>ObjectInputStream</code>.
+
* <code>delete()</code>
  
=== Zápis a načtení objektu ===
+
== Práce s adresáři ==
 +
* Podobně jako v&nbsp;Unixu/Linuxu je adresář chápán jako speciální soubor.
 +
* <code>File[] listFiles()</code>
 +
* <code>mkdir(File nazev)</code>
  
Následující kód je zjednodušený, neřeší ošetření vyjímek. Jde nám o schéma použití serializace.
 
  
<code>
+
== Související stránky ==  
  Poznamka pozn = new Poznamka();
+
Čtení obsahu souboru a zápis do souboru je na následujících stránkách:
 
+
* [[Java: Textový vstup a výstup]]... textové vstupy a výstupy - soubory *.csv, *.txt,...,
  File file = new File("cestaANazevSouboru");
+
* [[Serializace]]... ukládání celých objektů v binárním tvaru.
  FileOutputStream fos = new FileOutputStream(file);
+
  ObjectOutputStream objOut = new ObjectOutputStream(fos);
+
 
+
  objOut.write (pozn);
+
 
+
  objOut.close();
+
</code>
+
  
<code>
 
  Poznamka pozn;
 
 
 
  File file = new File("cestaANazevSouboru");
 
  FileInputStream fis = new FileInputStream(file);
 
  ObjectInputStream objIn = new ObjectInputStream(fis);
 
 
 
  pozn = (Poznamka) objIn.read(); // lépe by bylo ověřit správnou třídu pomocí instance_of
 
 
 
  objIn.close();
 
</code>
 
  
=== Příklad: poznámkový blok ===
+
== Další zdroje ==
* Máme třídu <code>Poznamka</code>, která obsahuje text poznámky a datum vytvoření.  
+
* [http://download.oracle.com/javase/tutorial/essential/io/file.html Oracle: Reading, Writing, and Creating Files]
* Máme 30 poznámek (instancí třídy) a chceme je uložit do souboru a později načíst.  
+
* [http://www.javapractices.com/topic/TopicAction.do?Id=42 JavaPractices.com: Reading and Writing Text Files].
* Můžeme tedy:
+
*# zapsat data do textového souboru, kam na každý řádek zapíšeme jednu poznámku v textové podobě, pak středník a pak datum vytvoření ve formátu DD.MM.YYYY
+
*#: pro ukládání a čtení si ale musíme připravit metody, které vyřeší třeba situaci, kdy je středník součástí poznámky samotné.
+
*# použít serializaci. Pak stačí, když třída <code>Poznamka</code> implementuje rozhraní <code>Serializable</code>, protože <code>String</code> i <code>Date</code> toto rozhraní také implementují a jiné atributy třída <code>Poznamka</code> nemá.
+

Aktuální verze z 17. 3. 2020, 11:26


Obsah

Manipulace se soubory

V nově vytvářených projektech zvažte použití rozhraní (interface) java.nio.file.Path a třídy java.nio.file.Files (vyžaduje Java SE 7).

Třída java.io.File

Vytvoření odkazu na soubor/cestu


Vytvoření a ověření existence souboru


Operace se soubory

Práce s adresáři


Související stránky

Čtení obsahu souboru a zápis do souboru je na následujících stránkách:


Další zdroje

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje