Java: Textový vstup a výstup
Z MiS
(Rozdíly mezi verzemi)
m (→Scanner: Desetinná čísla s čárkou, hasNextDouble().) |
(→Scanner: Upraven oddělovač pro čtení „pseudo-CSV“.) |
||
| Řádka 44: | Řádka 44: | ||
== Scanner == | == Scanner == | ||
* Třída <code>Scanner</code> slouží ke čtení z textového vstupu — z klávesnice nebo z textového souboru. | * Třída <code>Scanner</code> slouží ke čtení z textového vstupu — z klávesnice nebo z textového souboru. | ||
| − | * Zaveden od Javy | + | * Zaveden od Javy 5 — nahrazuje <tt>BufferedReader</tt>. |
; Metody: | ; Metody: | ||
| Řádka 59: | Řádka 59: | ||
* <code>boolean hasNextDouble()</code> | * <code>boolean hasNextDouble()</code> | ||
** následuje na vstupu desetinné číslo? | ** následuje na vstupu desetinné číslo? | ||
| − | * <code>useDelimiter(String delim)</code> | + | * <code>useDelimiter(String delim)</code>, resp. <code>useDelimiter(Pattern delim)</code> |
| − | ** | + | ** Oddělovač položek na řádku, například:<br /><code>out.useDelimiter(",");</code> |
| − | out.useDelimiter(",") | + | ** Jako oddělovač lze použít i [http://cs.wikipedia.org/wiki/Regul%C3%A1rn%C3%AD_v%C3%BDraz regulární výraz (→ Wikipedia.org)] reprezentovaný třídou <code>[https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html Pattern]</code>. |
| + | ** Pro načítání jednoduchého CSV lze použít (pozor, není to plnohodnotné čtení CSV, ale mnohdy stačí): | ||
| + | out.useDelimiter("\\s*[;,\n\r\t]\\s*") | ||
; Otevření vstupu: | ; Otevření vstupu: | ||
Verze z 20. 11. 2014, 10:24
Obsah |
BufferedWriter
Třída BufferedWriter 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.charsetForName("utf-8");
Path cesta = Paths.get("vystup.txt");
BufferedWriter out = Files.newBufferedWriter(cesta, kodovani);
Související třídy:
- Charset
- informace o kódování souboru
- Files, Paths
- práce s cestami a soubory
- umí i otevřít BufferedWriter.
- Metody
-
write(String text) -
newLine()- Přidá do výstupu konec řádku. Respektuje národní nastavení a platformové závislosti.
-
flush()- Provede fyzický zápis stávajícího obsahu bufferu na výstup.
-
close()- Zavře výstupní soubor.
- Provede i
flush().
Charset kodovani = Charset.charsetForName("utf-8");
Path cesta = Paths.get("vystup.txt");
BufferedWriter out = Files.newBufferedWriter(cesta, kodovani);
out.write("blabla");
out.newLine();
out.close();
Scanner
- Třída
Scannerslouží ke čtení z textového vstupu — z klávesnice nebo z textového souboru. - Zaveden od Javy 5 — nahrazuje BufferedReader.
- Metody
-
next()- přečte celý řádek až po oddělovač (viz dále)
- při čtení z konzole (klávesnice) čeká na oddělovač
- bere jednotlivá slova, oddělená standardně bílým místem
-
int nextInt() -
int nextDouble()- vrací objektový typ Double.
- Desetinná čísla je třeba zadávat podle národního nastavení. Pro české nastavení tedy s desetinnou čárkou.
-
boolean hasNext()- je k dispozici další slovo?
-
boolean hasNextDouble()- následuje na vstupu desetinné číslo?
-
useDelimiter(String delim), resp.useDelimiter(Pattern delim)- Oddělovač položek na řádku, například:
out.useDelimiter(","); - Jako oddělovač lze použít i regulární výraz (→ Wikipedia.org) reprezentovaný třídou
Pattern. - Pro načítání jednoduchého CSV lze použít (pozor, není to plnohodnotné čtení CSV, ale mnohdy stačí):
- Oddělovač položek na řádku, například:
out.useDelimiter("\\s*[;,\n\r\t]\\s*")
- Otevření vstupu
- Standardní vstup
Scanner sc = new Scanner(System.in); int i = sc.nextInt(); vstup=input.next();
- Ze souboru:
Scanner sc = new Scanner(new File("myNumbers"));
while (sc.hasNextLong()) {
...
long aLong = sc.nextLong();
...
}
Viz také