Práce se soubory v Javě

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
m (→Příklady: Překlepy)
m (Opraven vzhled, ponecháno pouze pro manipulaci se soubory.)
 
(Není zobrazeno 8 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
 
−
** BufferedReader
 
  
−
== 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