Domů » Informatika » Programovací jazyk » Jazyk Java » Systémové třídy

Systémové třídy

java.lang.System

Standardní výstup

Standardní výstup System.out se nejčastěji používá v konzolových aplikací k poskytování informací o stavu programu či výsledcích výpočtu. Důležité jsou především metody print() a println(). Tyto metody jsou schopné vypsat jakýkoliv objekt, který je na řetězec převeden voláním statické metody String.valueOf() s daným objektem jako parametrem. Proto lze bezpečně vypisovat i hodnoty null.

kód v jazyce Java - Zobrazit

  1. System.out.println("Výsledek je " + vysledek + ".");
Standardní vstup

Pro jednoduché načítání dat ze standardního vstupu System.in lze využít třídu Scanner, která v konstruktoru obdrží libovolný vstupní proud, v tomto případě standardní vstup. Potom je schopná z tohoto proudu načítat tokeny zadaného typu. V případě, že se Scanner nachází na konci proudu, aktuální vlákno se zablokuje a Scanner čeká na další data. V případě chybných dat nebo uzavření toku dojde k výjimce.

kód v jazyce Java - Zobrazit

  1. Scanner scanner = new Scanner(System.in);
  2. // zde se vlákno zablokuje dokud není zadáno číslo na vstup
  3. int number = scanner.nextInt();
  4. // existují další podobné metody, např. nextBoolean, nextLine, atd.

java.awt.Desktop

Užitečnou třídou pro vyvolávání různých uživatelských akcí je třída Desktop ze standardní knihovny AWT. Poměrně zajímavou metodou je otevření zadané adresy URL ve výchozím systémovém prohlížeči a otevření souboru výchozím programem. Obě tyto operace jsou demonstrovány v následujícím kó­du:

Otevření zadané adresy v prohlížeči

Otevření adresy URL ve výchozím webovém prohlížeči:

kód v jazyce Java - Zobrazit

  1. URI uri = new URI("http://google.cz/");
  2. Desktop.getDesktop().browse(uri);
Otevření souboru

Otevření souboru výchozím přiřazeným programem:

kód v jazyce Java - Zobrazit

  1. File file = new File("image.png");
  2. Desktop.getDesktop().open(file);
  3. // existuje i podobná funkce edit(file)

java.lang.Runtime

Spuštění příkazu

Před použitím metody exec() je třeba důkladně prostudovat dokumentaci. Díky ní a praktickým zkušenostem uživatelů se ukázalo, že je na některých platformách nezbytné přesměrovat standardní a chybový výstup spuštěného procesu (nejlépe v samostatném vlákně). Bez tohoto opatření může spuštěný proces „zamrznout“.

Pozor: metoda exec() NENÍ příkazový řádek. Její chování je třeba důkladně otestovat na všech cílových platformách a verzích JVM.

kód v jazyce Java - Zobrazit

  1. private static int execute(String command) throws IOException {
  2.   Process p = Runtime.getRuntime().exec(command);
  3.  
  4.   // spustit zachytávání chybového výstupu (nutné!)
  5.   new StreamGobbler("ERR: ", p.getErrorStream()).start();
  6.   // spustit zachytávání standardního výstupu (nutné!)
  7.   new StreamGobbler("OUT: ", p.getInputStream()).start();
  8.  
  9.   return p.waitFor();
  10. }
  11.  
  12. private static class StreamGobbler extends Thread {
  13.   private final String prefix;
  14.   private final InputStream is;
  15.  
  16.   private StreamGobbler(String prefix, InputStream is) {
  17.     super();
  18.     this.prefix = prefix;
  19.     this.is = is;
  20.   }
  21.  
  22.   @Override
  23.   public void run() {
  24.     try {
  25.       BufferedReader dis = new BufferedReader(new InputStreamReader(is));
  26.       String line = null;
  27.  
  28.       while ((line = dis.readLine()) != null) {
  29.         System.out.print(prefix);
  30.         System.out.print(line);
  31.         System.out.println();
  32.       }
  33.     } catch (IOException ioe) {
  34.       ioe.printStackTrace();
  35.     }
  36.   }
  37. }

Reference