Práce se soubory v Javě

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Vytvoření první části: manipulace se soubory)
 
(Doplnění zápisu obsahu souborů a serializace)
Řádka 2: Řádka 2:
 
[[Category:Informatika]]
 
[[Category:Informatika]]
 
[[Category:Programování]]
 
[[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 ==
Řádka 26: Řádka 28:
 
** mkdir(File nazev)
 
** 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'').
 +
* Vstupní (výstupní) proud je vlastně třída, která umožňuje zapisovat (číst) data z (do) souboru.
 +
 +
=== Příklady ===
 +
* binární data (obecná data, tedy libovolná posloupnost byte)
 +
** FileOutputStream
 +
** FileInputStream
 +
* textová data
 +
** BufferedWriter
 +
** BufferedWriter
  
 
== Serializace ==
 
== Serializace ==
 +
 +
=== 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? ===
 +
* Třída, jejíž instance chceme ukládat do souboru, musí implementovat rozhraní <code>Serializable</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>.
 +
 +
=== Zápis a načtení objektu ===
 +
 +
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>
 +
  Poznamka pozn = new Poznamka();
 +
 
 +
  File file = new File("cestaANazevSouboru");
 +
  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 ===
 +
* Máme třídu <code>Poznamka</code>, která obsahuje text poznámky a datum vytvoření.
 +
* Máme 30 poznámek (instancí třídy) a chceme je uložit do souboru a později načíst.
 +
* 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á.

Verze z 22. 7. 2011, 13:46


Pro podrobnější přehled o způsobech zápisu si pročtete tutoriál ze stránek firmy Oracle.

Obsah

Manipulace se soubory

Třída java.io.File




Přístup k obsahu souboru

Příklady

Serializace

Co je to serializace?

Jak serializace funguje?

Zápis a načtení objektu

Následující kód je zjednodušený, neřeší ošetření vyjímek. Jde nám o schéma použití serializace.

  Poznamka pozn = new Poznamka();
  
  File file = new File("cestaANazevSouboru");
  FileOutputStream fos = new FileOutputStream(file);
  ObjectOutputStream objOut = new ObjectOutputStream(fos);
  
  objOut.write (pozn);
  
  objOut.close();

  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();

Příklad: poznámkový blok

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