Systemy wejścia i wyjścia Michał Wrona
Co to jest system wejścia i wyjścia? Pobierania informacji ze źródeł danych, zdolnych przesyłać sekwencje bajtów, oraz wysyłania informacji do każdego obiektu, który potrafi odebrać sekwencję bajtów. obsługa plików i katalogów, zapisywanie do plików, wczytywanie informacji z plików.
Strumienie Strumień wejścia – obiekt z którego możemy pobrać sekwencję znaków, opisany przez klasę abstrakcyjną InputStream. Strumień wyjścia – Obiekt do którego możemy wysyłać sekwencję bajtów opisany klasą OutputStream. Klasy Reader i Writer (2-bajtowe znaki Unicode).
Wczytywanie i zapisywanie bajtów Klasa InputStream posiada metodę abstrakcyjną: abstract int read() Metoda ta wczytuje jeden bajt i zwraca jego wartość lub -1, jeżeli natrafi na zakończenie źródła danych Analogicznie klasa OutputStream definiuje metodę: abstract void write(int b) Która wysyła jeden bajt do aktualnego wyjścia.
A dobre to?
Java.io.InputStream abstract int read() - pobiera jeden bajt i zwraca jego wartość, -1 gdy koniec strumienia. int read(byte[] b) - wczytuje dane do tablicy i zwraca liczbe wczytanych bajtów. int read(byte[] b, int start, int dlugosc) long skip(long n) – ignoruje n bajtów w strumieniu wejścia. int available () – ilość dostępnych bajtów bez możliwości blokowania. Java.io.OutputStream abstract void write(int i) – zapisuje jeden bajt. void write(byte[] b) – zapisuje wszystkie bajty w tablicy b. void write(byte[] b, int start, int dlugosc).
Zoo pełne strumieni W przeciwieństwie do języka C, który w zupełności zadowalał się jednym typem FILE, JAVA posiada całe zoo, ponad 60(!!)różnych typów strumieni.
Zoo pełne strumieni(2)
Budowa filtrów strumieni A co jeśli chcemy przeczytać np. liczby z pliku? Należy utworzyć obiekt typu FileInputStream, a następnie przekazać go konstruktorowi DataInputStream. Nadal jednak operujemy na jednobajtowych operatorach… zresztą popatrzmy:
Prawie jak zapis… To gdzie jest problem?
Zapisywanie tekstu Z pomocą przychodzą nam klasy Writer. Obiekty tej klasy drukują łańcuchy i liczby w formacie tekstowym. DataOutputStream = PrintWriter Musi ona być łączona z FileWriter, lub FileOutputStream by poznała obiekt docelowy zapisywanego tekstu. Należy również pamietać o zamknięciu i opróżnieniu strumienia wyjścia pisząc close().
Wczytywanie tekstu Myślisz że jest klasa analogiczna do DataInputStream, która pozwoli Ci czytać dane w formacie tekstowym..NIE. Ale jest i na to sposób – w klasie BufferedReader jest metoda readLine() pozwalająca pobrać linijkę tekstu wiec…
…prawie robi dużą różnicę
Zarządzanie plikami Umiemy zapisywać i odczytywać dane z plików, jednak obsługa plików to coś więcej np.: wczytanie listy plików w katalogu, sprawdzenie nazwy katalogu, rozmiaru pliku, sprawdzenie daty ostatniej modyfikacji, sprawdzenie czy plik jest do odczytu, czy do zapisu, tworzenie nowych katalogów, usuwanie plików i katalogów. Wszystko to pozwala nam robić klasa File.
Lista plików
Lepsza lista plików
Java.io.File boolean delete() – próbuje skasować plik, jeżeli się uda to zwraca true. void deleteOnExit() – żąda, aby plik został skasowany po wyłączeniu wirtualnej maszyny. boolean exists() – zwraca true, jeżeli dany plik lub katalog istnieje. boolean isHidden() zwraca true, jeżeli dany plik jest ukryty. long lastModified() data ostatniej modyfikacji pliku lub 0 jak nie istnieje. Należy użyć Date(long), by uzyskać normalny czas. boolean createNewFile() boolean mkdir() boolean renameTo(File cel) ; cel – obiekt File określający nową nazwę pliku. boolean setReadOnly() zmienia tryb na tylko do odczytu.
Bonus : czyli wyrażenia regularne Wyrażenie regularne ma zazwyczaj następującą postać: Matcher liczba = Pattern.compile (Kod Regex ).matcher(String); while (liczba.find()) { System.out.println(liczba.group()); } Najważniejsze znaczki(reszta w pomocy programu): Bokreślony znak np. Literka B, \t \nznak tabulacji, nowej linii, [abc]dowolny znak z nawiasu, [^abc]dowolny znak ale nie ten z nawiasu (negacja), \sznak końca strony, spacja, nowa linia, tabulacja, \Sdowolny znak, z wyjątkiem białych znaków, \d cyfra, \Ddowolny znak, ale nie cyfra, \wznak tworzący słowa, \Wznaki bez początku słowa,
Szukaj, a znajdziesz
Dziękuję za uwagę