200 likes | 335 Views
Systemy wejścia i wyjścia. Michał Wrona. Co to jest system wejścia i wyjścia?. P obierania 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,
E N D
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.
Java.io.InputStream Java.io.OutputStream 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. • 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.
Należy utworzyć obiekt typu FileInputStream, a następnie przekazać go konstruktorowi DataInputStream. Nadal jednak operujemy na jednobajtowych operatorach… zresztą popatrzmy: Budowa filtrów strumieni A co jeśli chcemy przeczytać np. liczby z pliku?
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…
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.
Java.io.File booleandelete() – próbuje skasować plik, jeżeli się uda to zwraca true. voiddeleteOnExit() – żąda, aby plik został skasowany po wyłączeniu wirtualnej maszyny. booleanexists() – zwraca true, jeżeli dany plik lub katalog istnieje. booleanisHidden() 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. booleancreateNewFile() booleanmkdir() booleanrenameTo(File cel) ; cel – obiekt File określający nową nazwę pliku. booleansetReadOnly() zmienia tryb na tylko do odczytu.
Bonus : czyli wyrażenia regularne • Najważniejsze „znaczki”(reszta w pomocy programu): • B określony znak np. Literka B, • \t \n znak tabulacji, nowej linii, • [abc] dowolny znak z nawiasu, • [^abc] dowolny znak ale nie ten z nawiasu (negacja), • \s znak końca strony, spacja, nowa linia, tabulacja, • \S dowolny znak, z wyjątkiem „białych znaków”, • \d cyfra, • \D dowolny znak, ale nie cyfra, • \w znak tworzący słowa, • \W znaki bez początku słowa, 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()); }