Java: Textový vstup a výstup

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Vstup (Scanner): Upřesněno vysvětlení k nastavení kódování, doplněno info, jak nastavit kódování.)
m (Upraveno pořadí kapitol a názvy.)
Řádka 1: Řádka 1:
 
[[Category:VSE]][[Category:Informatika]][[Category:Java]]
 
[[Category:VSE]][[Category:Informatika]][[Category:Java]]
  
== Zápis do souboru (<tt>BufferedWriter</tt>) ==
+
== Čtení ze souboru (<tt>Scanner</tt>) ==
 
+
Třída <code>BufferedWriter</code> slouží pro zápis dat do textového výstupu.
+
 
+
; Princip:
+
*Ukládá zapisovaná data do paměťového bufferu.
+
*Teprve při dosažení limitu data naráz zapíše.
+
*Je to efektivnější, než psát jednotlivé malé texty hned!
+
 
+
; Otevření standardního výstupu
+
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
+
Tuto variantu používáme tehdy, kdy chceme společnou metodu pro psaní do souboru i na standardní výstup.
+
Pro standardní výstup jinak samozřejmě stačí:
+
System.out.println(...);
+
 
+
; Otevření souboru
+
Charset kodovani = Charset.forName("utf-8");
+
Path cesta = Paths.get("vystup.txt");
+
BufferedWriter out = Files.newBufferedWriter(cesta, kodovani);
+
Související třídy:
+
* <tt>Charset</tt>
+
** informace o kódování souboru
+
* <tt>Files</tt>, <tt>Paths</tt>
+
** práce s cestami a soubory
+
** umí i otevřít <tt>BufferedWriter</tt>.
+
 
+
; Metody
+
* <code>write(String text)</code>
+
* <code>newLine()</code>
+
** Přidá do výstupu konec řádku. Respektuje národní nastavení a platformové závislosti.
+
* <code>flush()</code>
+
** Provede fyzický zápis stávajícího obsahu bufferu na výstup.
+
* <code>close()</code>
+
** Zavře výstupní soubor.
+
** Provede i <code>flush()</code>.
+
 
+
Charset kodovani = Charset.forName("utf-8");
+
Path cesta = Paths.get("vystup.txt");
+
BufferedWriter out = Files.newBufferedWriter(cesta, kodovani);
+
out.write("blabla");
+
out.newLine();
+
out.close();
+
 
+
== Vstup (<tt>Scanner</tt>) ==
+
 
* Třída <code>Scanner</code> slouží ke čtení z textového vstupu &mdash; z klávesnice nebo z textového souboru.
 
* Třída <code>Scanner</code> slouží ke čtení z textového vstupu &mdash; z klávesnice nebo z textového souboru.
 
* Zaveden od Javy 5 &mdash; nahrazuje <tt>BufferedReader</tt>.
 
* Zaveden od Javy 5 &mdash; nahrazuje <tt>BufferedReader</tt>.
Řádka 110: Řádka 67:
 
     ...
 
     ...
 
  }
 
  }
 +
 +
 +
== Zápis do souboru (<tt>BufferedWriter</tt>) ==
 +
 +
Třída <code>BufferedWriter</code> slouží pro zápis dat do textového výstupu.
 +
 +
; Princip:
 +
*Ukládá zapisovaná data do paměťového bufferu.
 +
*Teprve při dosažení limitu data naráz zapíše.
 +
*Je to efektivnější, než psát jednotlivé malé texty hned!
 +
 +
; Otevření standardního výstupu
 +
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
 +
Tuto variantu používáme tehdy, kdy chceme společnou metodu pro psaní do souboru i na standardní výstup.
 +
Pro standardní výstup jinak samozřejmě stačí:
 +
System.out.println(...);
 +
 +
; Otevření souboru
 +
Charset kodovani = Charset.forName("utf-8");
 +
Path cesta = Paths.get("vystup.txt");
 +
BufferedWriter out = Files.newBufferedWriter(cesta, kodovani);
 +
Související třídy:
 +
* <tt>Charset</tt>
 +
** informace o kódování souboru
 +
* <tt>Files</tt>, <tt>Paths</tt>
 +
** práce s cestami a soubory
 +
** umí i otevřít <tt>BufferedWriter</tt>.
 +
 +
; Metody
 +
* <code>write(String text)</code>
 +
* <code>newLine()</code>
 +
** Přidá do výstupu konec řádku. Respektuje národní nastavení a platformové závislosti.
 +
* <code>flush()</code>
 +
** Provede fyzický zápis stávajícího obsahu bufferu na výstup.
 +
* <code>close()</code>
 +
** Zavře výstupní soubor.
 +
** Provede i <code>flush()</code>.
 +
 +
Charset kodovani = Charset.forName("utf-8");
 +
Path cesta = Paths.get("vystup.txt");
 +
BufferedWriter out = Files.newBufferedWriter(cesta, kodovani);
 +
out.write("blabla");
 +
out.newLine();
 +
out.close();
 +
  
 
== Standardní vstup a výstup ==
 
== Standardní vstup a výstup ==
Řádka 127: Řádka 129:
 
  System.in.available() > 0
 
  System.in.available() > 0
  
== Viz také ==
+
 
 +
== Související stránky ==
 
* [[Práce se soubory v Javě]]
 
* [[Práce se soubory v Javě]]
 +
  
  

Verze z 16. 3. 2020, 15:49


Obsah

Čtení ze souboru (Scanner)

Třídu Scanner nepoužívejte v programech, které pracují s vlákny!
Konstruktory

Kódování národních znaků:


Pokud nenastavíte správné kódování českých znaků, třída Scanner se při ladění v prostředí NetBeans 8.0.2 (JDK 7u71) může chovat k souboru, jako by byl prázdný.

Pokud máte podobné problémy, zkuste:

a) nastavte správné kódování češtiny v konstruktoru Scanneru či zkonvertujte soubor na správné kódování (třeba pomocí Notepadu++ či jiného editoru, který umí nastavit kódování).

b) projekt přeložte (Clean & Build) a spusťte přímo výsledný JAR ze složky dist v adresáři projektu. (viz Export balíčku JAR).

Metody
out.useDelimiter("\\s*[;,\n\r\t]\\s*")
Otevření vstupu
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
vstup=input.next();
Scanner sc = new Scanner(new File("myNumbers"));
while (sc.hasNextLong()) {
    ...
    long aLong = sc.nextLong();
    ...
}
Scanner sc = new Scanner(new File("myRows"), "windows-1250");
while (sc.hasNextLine()) {
    ...
    String radek = sc.nextLine();
    ...
}


Zápis do souboru (BufferedWriter)

Třída BufferedWriter slouží pro zápis dat do textového výstupu.

Princip
Otevření standardního výstupu
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));

Tuto variantu používáme tehdy, kdy chceme společnou metodu pro psaní do souboru i na standardní výstup. Pro standardní výstup jinak samozřejmě stačí:

System.out.println(...);
Otevření souboru
Charset kodovani = Charset.forName("utf-8");
Path cesta = Paths.get("vystup.txt");
BufferedWriter out = Files.newBufferedWriter(cesta, kodovani);

Související třídy:

Metody
Charset kodovani = Charset.forName("utf-8");
Path cesta = Paths.get("vystup.txt");
BufferedWriter out = Files.newBufferedWriter(cesta, kodovani);
out.write("blabla");
out.newLine();
out.close();


Standardní vstup a výstup

System.out
System.out.print("Ahoj!");
System.out.println("Vypíše řádek na obrazovku!");
System.in
System.in.read();
System.in.available() > 0


Související stránky


Zdroje

  1. JavaPractices.com → Reading and writing text files
  2. Java Tutorial → Scanner
Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje