Práce se soubory v Javě

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
m (→Zápis a načtení objektu: Doplnění komentářů)
m (Opraven vzhled, ponecháno pouze pro manipulaci se soubory.)
 
(Nejsou zobrazeny 4 mezilehlé verze od 1 uživatele.)
Řádka 1: Řádka 1:
 
[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Java]]
 
[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Java]]
−
<div class="Poznamka">Pro podrobnější přehled o způsobech zápisu si pročtete tutoriály: [http://download.oracle.com/javase/tutorial/essential/io/file.html Práce se soubory] a [http://www.javapractices.com/topic/TopicAction.do?Id=42 Práce s textovými soubory]. (Viz také [[#Další_zdroje|Další zdroje]].)</div>
 
−
 
−
<div class="Varovani">Pozor!!! Od verze Java SE 7 zvažte použití [http://download.oracle.com/javase/tutorial/essential/io/legacy.html tříd z balíčku java.nio.file]!!!</div>
 
  
 
== Manipulace se soubory ==
 
== Manipulace se soubory ==
  
 
<div class="Poznamka">V nově vytvářených projektech zvažte použití  
 
<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>].</div>
+
[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> ===
+
== 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'').
 
−
* Vstupní (výstupní) proud je vlastně třída, která umožňuje zapisovat (číst) data z (do) souboru.
 
  
−
=== Příklady ===
+
== Vytvoření odkazu na soubor/cestu ==
−
* binární data (obecná data, tedy libovolná posloupnost byte)
+
* <code>File vystupniSoubor = new File(nazevSouboru.pripona);</code>
−
** FileOutputStream
+
−
** FileInputStream
+
−
* textová data
+
−
** BufferedWriter
+
−
** BufferedReader
+
−
** Scanner
+
  
−
== Serializace ==
 
  
−
=== Co je to serializace? ===
+
== Vytvoření a ověření existence souboru ==
−
* V objektovém programování pracujeme s objekty, které obsahují atributy.
+
* <code>boolean createNewFile()</code>
−
* 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.
+
* <code>boolean dbFile.exists()</code>
−
* Pokud do souboru chceme ukládat složitější data (objekty), musí je naše aplikace převést na posloupnost byte.
+
* <code>boolean createNewFile()</code>
−
* Převod můžeme provést vlastními prostředky, ale musíme si pro to naprogramovat patřičné metody.
+
* <code>boolean isDirectory()</code>
−
* 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.
+
* <code>long length()</code>
  
−
=== 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 ===
+
== Operace se soubory ==
 +
* <code>renameTo(File novy)</code>
 +
* <code>delete()</code>
  
−
<div class="Poznamka">Následující kód je zjednodušený, neřeší ošetření vyjímek. Jde nám o schéma použití serializace.</div>
+
== 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>
  
−
Zápis instance třídy <tt>Poznamka</tt> do souboru na cestě <tt>cestaANazevSouboru</tt>:
 
−
<code>
 
−
  Poznamka pozn = new Poznamka();
 
−
 
 
−
  File file = new File("''cestaANazevSouboru''");         
 
−
      ''// Označuje soubor (uchovává cestu)''
 
−
  FileOutputStream fos = new FileOutputStream(file);     
 
−
      ''// Otevře soubor pro zápis''
 
−
  ObjectOutputStream objOut = new ObjectOutputStream(fos);
 
−
      ''// Provádí převod objektů na posloupnost byte (serializaci)''
 
−
 
 
−
  objOut.write(pozn); ''//Zápis samotný''
 
−
 
 
−
  objOut.close(); ''//Uzavření souboru''
 
−
</code>
 
  
−
Přečtení instance třídy <tt>Poznamka</tt> ze souboru na cestě <tt>cestaANazevSouboru</tt>:
+
== Související stránky ==  
−
<code>
+
Čtení obsahu souboru a zápis do souboru je na následujících stránkách:
−
  Poznamka pozn;
+
* [[Java: Textový vstup a výstup]]... textové vstupy a výstupy - soubory *.csv, *.txt,...,
−
 
+
* [[Serializace]]... ukládání celých objektů v binárním tvaru.
−
  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á.
 
  
 
== Další zdroje ==
 
== Další zdroje ==
 
* [http://download.oracle.com/javase/tutorial/essential/io/file.html Oracle: Reading, Writing, and Creating Files]
 
* [http://download.oracle.com/javase/tutorial/essential/io/file.html Oracle: Reading, Writing, and Creating Files]
 
* [http://www.javapractices.com/topic/TopicAction.do?Id=42 JavaPractices.com: Reading and Writing Text Files].
 
* [http://www.javapractices.com/topic/TopicAction.do?Id=42 JavaPractices.com: Reading and Writing Text Files].

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