## Абстрактные классы ввода/вывода - `Reader` - абстрактный класс, в котором собраны самые общие методы символьного ввода - `Writer` - абстрактный класс, в котором собраны самые общие методы символьного вывода - `InputStream` - абстрактный класс с общими методами байтового ввода - `OutputStream` - абстрактный класс с общими методами байтового вывода #### Абстрактные классы `Reader`, `InputStream` Методы: ```java int read() int read(char[] buf)` или `int read(byte[] buf) int read(char[] buf, int offset, int len)` или `int read(byte[] buf, int offset, int len) int skip(long n) void reset() void close() ``` #### Абстрактные классы `Writer`, `OutputStream` Методы: ```java write(int elem) write(char[] buf) или write(byte[] buf) write(char[] buf, int offset, int len) или write(byte[] buf, int offset, int len) flush() write(String s) write(String s, int offset, int len) ``` ## Иерархия символьных потоков ![Иерархия символьных потоков](../Pictures/06_01.%20Иерархия%20символьных%20потоков.png) ## Иерархия байтовых потоков ![Иерархия байтовых потоков](../Pictures/06_02.%20Иерархия%20байтовых%20потоков.jpg) ## Обертка классов ![Обертка классов](../Pictures/06_03.%20Обертка%20классов.png) ## Класс `FilterInputStream` ```java public class FilterInputStream extends InputStream { private InputStream in; protected FilterInputStream(InputStream in) { this.in = in; } } ``` ## Примеры записи в файл ```java int a = 12345; FileOutputStream fos = new FileOutputStream("out.txt"); fos.write(Integer.toString(a).getBytes()); fos.close(); ``` ```java PrintWriter pr = new PrintWriter("out1.txt"); pr.print(Integer.toString(a)); pr.close(); ``` ## Примеры чтения из файла ```java FileInputStream fis = new FileInputStream("out.txt"); while(fis.available() != 0) { int b = fis.read(); System.out.print((char)b); } fis.close ``` ```java FileReader fr = new FileReader("out1.txt"); while (fr.ready()) { int c =fr.read(); System.out.print((char)c); } fis.close(); System.out.println(); ``` ```java Scanner sc = new Scanner(new File("out1.txt")); String str = sc.next(); System.out.println(str); System.out.println(); ``` ```java import mypack.Person; import java.io.DataOutputStream; import java.io.FileOutputStream; import java.io.PrintWriter; public class Main { public static void main(String[] args) throws Exception { person nekto = new Person("Artemij", 20, 1.75, false); DataOutputStream f1 = new DataOutputStream(new FileOutputStream("1.bin")); f1.writeUTF(nekto.getName()); f1.writeInt(nekto.getAge()); f1.writeDoublie(nekto.getHeight()); f1.writeBoolean(nekto.isMarriage()); f1.close; person kto; String name = ""; int age = 0; DataInputStream f2 = new DataInputStream(new FileInputStream("1.bin")); name = f2.readUTF(); age = f2.readInt(); System.out.println(name + " " + age); f2.close; } } ``` ## Запись и чтение объектов ```java String str = "123456"; ObjectOutputStream os = new ObjectOutputStream(new BufferedOutputStrean(new FileOutputStream("out.bin"))); os.writeObject(str); os.flush(); os.close(); ObjectInputStream is = new ObjectInputStream(new BufferedInputStream(new FileInputStream("out.bin"))); String str1 = (String)is.readObject(); is.close(); System.out.println(str1); ``` ```java String str = "123456"; ObjectOutputStream os = new ObjectOutputStream(new BufferedOutputStrean(new FileOutputStream("out.bin"))); os.writeObject(nekto); os.flush(); os.close(); ObjectInputStream is = new ObjectInputStream(new BufferedInputStream(new FileInputStream("out.bin"))); String str1 = (String)is.readObject(); is.close(); System.out.println(kto); ``` Каждый объект должен быть десериализован. Для этого соответствующий класс должен реализовывать интерфейс `serialisable`. ## Класс `File` - `getAbsolutePath()` - абсолютный путь файла, начиная с корня системы. В Android корневым элементом является символ слеша (`/`) - `canRead()` - доступно для чтения - `canWrite()` - доступно для записи - `exists()` - файл существует или нет - `getName()` - возвращает имя файла - `getParent()` - возвращает имя родительского каталога - `getPath()` - путь - `lastModified()` - дата последнего изменения - `isFile()` - объект является файлом, а не каталогом - `isDirectory()` - объект является каталогом - `isAbsolute()` - возвращает `true`, если файл имеет абсолютный путь - `renameTo(File newPath)` - переименовывает файл. В параметре указывается имя нового имени файла. Если переименование прошло неудачно, то возвращается `false` - `delete()` - удаляет файл. Также можно удалить **пустой** каталог ## Класс `StringTokenizer` ```java public static void main(String[] args) throws Exception { String str = "Я узнал, что у меня есть огромная семья"; StringTokenizer st = new StringTokenizer(str, ",.\n\r\t"); while (st.hasMoreTokens()) { System.out.println(st.nextToken()); } } ``` ```java public static void main(String[] args) throws Exception { FileReader f = new FileReader("1.txt"); StreamTokenizer st = new StreanTokenizer(f); int token = st.nextToken(); while (token != StreamTokenizer.TT_EOF) { System.out.println(st.nextToken(st.sval)); token = st.nextToken(); } } ```