Входные и выходные функции языка Java очень мощные и гибкие. Единственный недостаток заключается в том, что входные и выходные коды кажутся очень краткими, потому что вам часто нужно обернуть много разных объектов. В библиотеке классов Java содержимое части IO очень большое, поскольку в нем участвует широкий диапазон полей: стандартный ввод и вывод, операция файла, потоки данных в сети, струнные потоки, потоки объектов, zip -файлы -потоки ... Цель этой статьи состоит в том, чтобы ввести подробное объяснение примеров ввода и вывода в Java.
Иерархия потоков
определение:
Java будет читать объект данных в входной поток, а объект, на который он может быть записан, называется выходным потоком. Структурная диаграмма выглядит следующим образом:
1. Ввод и вывод:
Ввод/вывод относится к вводу или выводу данных в определенное устройство или среду. Любой язык имеет функцию ввода и вывода. В программе Java ввод и вывод завершаются через потоки. Он подключен к физическим устройствам через систему ввода и вывода Java. Хотя фактические физические устройства, подключенные к входным и выходным потокам, различны, они могут работать одинаково. Например, для ввода и вывода жесткого диска, ввода и вывода сетевого хоста, поэтому будут различные проблемы ввода и вывода и решения для различных устройств или сред.
2. Stream:
Поток относится к последовательности данных, которые перемещаются между входом и выводом компьютера. Данные в последовательности потока могут быть либо необработанными двоичными данными, которые не были обработаны, либо конкретными данными, которые соответствуют требованиям определенного формата после определенного процесса кодирования. Обычно вызвать часть, связанную с внутренней кодом, и частью независимой от внешнего кода.
Из метода передачи данных поток может быть разделен на входной поток и выходной поток; Из содержимого потока поток можно разделить на байтовый поток и поток символов.
(1) Поток ввода и вывода
Функция входного потока состоит в том, чтобы считать данные изнутри программы снаружи.
Функция выходного потока состоит в том, чтобы записать данные извне программы в внутреннюю.
(2) байтовый поток и поток символов
Поток байта может читать и записывать данные в единицах байтов, которые могут читать и записывать данные с одного байта за другим, или читать и записывать байтовые блоки любой длины за раз (то есть массивы байтов).
Потоки символов используются в символах при чтении и написании данных в потоках, по одному символу за раз или по одному блоку символа за раз.
Чтобы облегчить обработку потока, в пакете Java.io инкапсулируются потоки на языке Java, поэтому для использования потоков вы должны импортировать пакет java.io.
Поток ввода/вывода Java основан на четырех абстрактных классах, а именно: InputStream, OutputStream, читатель и писатель. Класс InputStream и его подкласс могут использоваться для реализации обработки ввода байтовых потоковых данных; Класс outputstream и его подкласс могут использоваться для реализации выходной обработки данных байтовых потоков; Класс читателей и его подкласс могут использоваться для реализации входной обработки данных потока символов; Класс писателей и его подкласс могут использоваться для реализации выходной обработки данных потока символов.
1. Файл класс
Чтение и написание файлов в Java может быть реализовано с помощью потоков ввода и вывода, но Java предоставляет специальный класс файлов для реализации его для файловых каталогов, свойств и информации о управлении.
(1) Конструктор класса файла
Конструкторы для создания объекта класса файла:
File (String pathname); // Создание на основе имени пути.
Файл (файл родитель, строка child); // Создать под заданным объектом файла.
File (String Parent, String child); // Создание на основе указанного пути.
Файл (URL URL); // Создание на основе ссылки на URL.
(2) Общие методы класса файла
Boolean canread (): определяет, является ли путь, соответствующий объекту файла, читабелен.
Boolean CanWrite (): определяет, является ли путь, соответствующий объекту файла, можно записать.
Boolean существует (): определяет, существует ли путь, соответствующий объекту файла.
String getabsolutepath (): получает абсолютный путь соответствующего пути объекта файла.
String getParent (): получает каталог соответствующего пути объекта файла.
String getPath (): получает путь, соответствующий объекту файла.
Boolean Isabsolute (): определяет, является ли путь, соответствующий объекту файла абсолютным путем.
String getName (): получает имя файла соответствующего пути объекта файла.
Boolean iSdirectory (): определяет, является ли путь, соответствующий объекту файла, каталогом.
Boolean Isfile (): определяет, является ли путь, соответствующий объекту файла файлом.
Boolean Ishidden (): определяет, является ли файл, соответствующий объекту файла скрытым атрибутом.
Long Length (): Получите длину файла, соответствующий объекту файла.
Long LastModified (): Получите последнее время изменения файла, соответствующее объекту файла.
Boolean renameto (File dest): измените имя файла файла, соответствующего объекту файла.
Boolean setReadonly (): установите соответствующий файл объекта файла в только чтение.
(3) Создать файл
Создайте новый файл, создав поток вывода файла. Этот метод не может создать каталог, и если файл, который вы хотите создать, уже существует, будет создан новый файл для перезаписи исходного файла.
FileOUtrputStream file = new FileOutputStream ("fileName"); (4) Получить список файлов
Получите список файлов определенной папки через метод List () или ListFiles () класса файла. Есть несколько форм:
String [] list ();
File [] listFiles ();
File [] listfiles (filenamefilter filter);
File [] listfiles (FileFilter Filter);
Среди них FileFilter и FilenameFilter являются интерфейсами, а фильтр является соответствующим фильтром. Объявите определенный класс и реализуйте интерфейс фильтра, чтобы все соответствующие файлы могли быть указаны в условиях фильтрации.
2. Class InputStream и класс OutputStream
Класс байтового потока представляет собой серию классов, полученных из абстрактных классов InputStream и OutputStream. Этот тип потока основан на байтах. Классы inputstream и outputstream могут использоваться для обработки данных двоичных файлов, а также для обработки текстовых файлов.
1. Общие методы класса InputStream
Класс InputStream - это родительский класс всех входных потоков. Все методы этого класса будут бросать ioException, когда возникает ошибка. Основные методы:
(1) Public Abstract int Read () эти ioException
Метод возвращает целое число между 0 и 255 или -1, а -1 означает, что конец потока встречался, а другие соответствующие байты читаются в.
(2) Public int Read (byte [] b) эти ioexception
Метод считывает байты в массив байтов, заданный параметром, а возвращаемое значение -это количество байтов, которые фактически читаются в или -1 (встречается конец потока).
(3) Public int Read (Byte [] b, int i, int b) эти ioexception
Последние два параметра метода дают исходную позицию чтения и максимальное количество байтов, считываемых соответственно.
(4) Public int доступен ()
Возвращает количество байтов, которые не были прочитаны в текущем объекте потока. То есть получить длину данных в потоке.
(5) Public Long Skip (Long N)
Пропустить n байтов в текущем объекте потока, а фактическое количество пропущенных байтов возвращается как возвратное значение.
(6) Общественный логический марксодержащий ()
Определите, поддерживает ли поток отметки, и оценки могут легко вернуться в исходную позицию чтения.
(7) Public void Close ()
Закройте текущий объект потока и выпустите ресурсы, занятые объектом потока.
(8) Public Void Mark (int i)
Установите флаг для текущей позиции в потоке, чтобы вы могли продолжать читать с этой позиции позже.
(9) Public Void Reset ()
Верните позицию чтения потока в положение установленного знака.
2. Общие методы класса выходного потока
Класс outputstream - родительский класс всех выходных потоков. Все методы этого класса возвращают пустоту и бросают ioException в случай ошибки. Основные методы:
(1) Public void write (int b) бросает ioException
Напишите байт данных в конце потока.
(2) Public void write (byte [] b) бросает ioException
Запишите данные в массиве B в текущий объект потока по очереди.
(3) Общественная пустонная проволока (байт [] b, int i, int n)
Напишите данные о последующих длинах в массиве в объект потока в последовательности с самого начала (включены).
(4) Public void Close ()
Закройте текущий объект потока и выпустите ресурсы, занятые объектом потока.
(5) Public void Flush ()
Принудительно выводит буферизованные данные в текущем объекте потока. Используйте этот метод для достижения немедленного вывода.
Большинство методов из двух вышеупомянутых классов переопределяются подклассами InputStream и OutputStream, за исключением методов Mark () и Reset ().
3. fileInputStream Class
Класс FileInputStream - это подкласс InputStream, который можно использовать для обработки потоков данных, которые используют файлы в качестве источников ввода данных для реализации операций чтения файлов.
Его методы строительства:
(1) FileInputStream (файл f)
Создайте поток ввода файла с объектом File F с указанным именем в качестве источника данных.
Если F существует, это должен быть путь файла. Если это каталог, будет выброшено ioException, но если этого каталога не существует, его будет брошено: FilenotFoundException будет брошено.
(2) FileInputStream (имя строки)
Создайте поток ввода файла с помощью файла с именем в качестве источника данных.
(3) FileInputStream (FileScriptor F)
Создайте поток ввода файла для входного конца на основе объекта дескриптора файла f.
Его основной метод - переопределить методы родительского класса (класс inputstream): read (), read (byte [] b), read (byte [] b, int i, int length), skip (long n), доступен (), close ().
4. FileOutputStream Class
Класс FileOutputStream - это подкласс OutputStream, который используется для обработки потоков данных, выводимых с помощью файлов в качестве данных, и реализации операций записи в файлы. Его методы строительства:
FileOutputStream (файл f);
FileOutputStream (файл F, логический B);
FileOutputStream (String F);
Его основные методы включают методы, которые охватывают родительский класс: написать (int b), записать (byte [] b), записать (byte [] b, int off, int len), close () и flush ().
5. DataInputStream и классы DataOutputStream
Объекты, созданные DateInputStream и классами DataOutputStream, называются потоками ввода данных и потоками выводов данных соответственно. Они реализуют интерфейс DataInput и интерфейс DataOutput соответственно. Класс DateInputStream и объект DataOutputStream разрешают чтение различных типов данных Java.
Эти два потока принадлежат к фильтрации потоков, и другие потоки, такие как inputstream или outputstream, часто используются в качестве их входа или вывода. Например:
FileInputStream fis = new FileInputStream ("d: //a.txt");
DataInputStream dis = new DataInputStream (FIS);
FileOutputStream fos = new FileOutputStream ("d: //a.txt");
DataOutputStream dos = new DataOutputStream (FOS);
Ввод и вывод DateInputStream и DataOutputStream практически соответствуют. Методы чтения и написания каждого основного типа данных могут быть идентифицированы с названия суффикса. Например:
reartint (), writeint () // Читать и написать значение int
readboolean (), writeboolean () // Читать и написать логическое значение
readchar (), writeChar () // Читать и написать персонаж
readdouble (), writedouble () // Читать и написать значение с плавающей запятой с двойной точностью
readfloat (), writefloat () // Читать и написать значение с плавающей точкой с одной задачей
WriteChars () // Напишите строку, но нет способа прямо прочитать строку
3. Класс читателей и класс писателей
Персонажи в Java используют кодирование Unicode, каждый символ имеет два байта, то есть 16 битов. Потоки символов основаны на символах, представленных 16-битными кодами Unicode, и чтения и записи текстовых данных, которые могут реализовать преобразование между внутренними форматами в программах Java и внешними форматами, такими как текстовые файлы, выходы отображения, входы клавиатуры и т. Д. Этот метод особенно подходит для работы китайских символов. Если китайские иероглифы работают в байтах, можно вывести искаженную код.
Читатель и писатель являются абстрактными родительскими классами всех потоков символов в пакете java.io, определяя ключевые методы для реализации других классов потоков. Двумя наиболее важными являются чтение () и write (), которые читают и записывают данные символов соответственно. Методы классов считывателей и писателей и их подклассы очень похожи на методы использования классов InputStream, классов outputstream и их подклассов. Но параметры в нем заменены символами или массивами символов.
1. Общие методы класса читателей и класса писателя
Класс читателей - это абстрактный класс. Все методы этого класса будут выбросить исключение IOException в условиях ошибки. Общие методы следующие:
(1) Abstract void Cloud (): закройте входной источник.
(2) void mark (int num Chars): поместите знак в текущую точку входного источника.
(3) Boolean MarkSupported (): Если этот поток поддерживает метод Mark/Reset, верно будет возвращено.
(4) int Read (): Прочитайте один символ.
(5) int Read (char [] buf): читать символы в массив символов.
(6) Abstract int Read (char [] buf, int offset, int numchars): читать символы в часть массива.
(7) Boolean Ready (): вернуть true, если следующий запрос ввода не должен ждать, в противном случае вернуть False.
(8) void reset (): сбросить входной указатель на помеченный набор.
(9) Длинный пропуск (длинные числа): пропустить ввод символов и вернуть фактическое количество пропущенных символов.
Класс писателей также является абстрактным классом, а обычно используемые методы следующие:
(1) Abstract void Close (): закройте выходной поток.
(2) Abstract void flush (): определить выходной статус, чтобы очистить любой кэш.
(3) void write (int ch): напишите один символ.
(4) void write (char [] buf): напишите в массив символов.
(5) Abstract void write (char [] buf, int offset, int numchars): напишите часть массива символов.
(6) void write (string str): напишите строку.
(7) void write (String str, int offset, int numchars): запишите часть строки.
2. FileReader Class
Класс FileReader наследует от класса InputStreamReader, а класс InputStreamReader наследует от класса Reader. Следовательно, методы, предоставленные классом читателя и классом InputStreamReader, могут использоваться для объектов, созданных классом FileReader. Методы конструктора FileReader:
FileReader (файл файла);
FileReader (FileScriptor E);
FileReader (String FileName);
3. Класс файлов
Класс файлов -автора наследуется от класса OutputStreamWriter, а класс OutputStreamWriter наследует от класса писателей. Следовательно, методы, предоставленные классом писателя и классом outputstreamwriter, могут использоваться объектами, созданными классом файла. Методы конструктора файла:
FileWrite (файл filePath);
FileWrite (файл F, Boolean Append);
FileWrite (FileScriptor E);
FileWrite (String FileName);
FileWrite (String FileName, Boolean Append);
4. BufferedReader Class
Класс BufferedReader наследует от класса считывателей, который используется для чтения данных в буфере. Класс BufferedReader принадлежит фильтрации потоков, а другие потоки, такие как FileReader, часто используются в качестве их входа или вывода. Его методы строительства:
BufferedReader (читатель в);
BufferedReader (Reader In, Int Bufsize);
Например:
FileReader fr = new FileReader ("d: /1.txt");
BufferedReader BUF = новый BufferedReader (FR);
BufferedReader предоставляет метод readerline () для чтения каждой строки текста.
5. BufferedWriter Class
Класс BufferedWriter наследует от класса писателей, а класс BufferedWriter используется для записи данных в буфер. Использование класса BufferedWriter аналогично использованию класса BufferedReader. Разница в том, что данные в буфере должны быть очищены методом flush () в конце, то есть записать все данные в буфере в файл. Его методы строительства:
BufferedWriter (писатель);
BufferedWriter (писатель, int bufsize);
4. Класс Randomaccessfile
Доступ к случайным файлам в Java требует использования класса randomAccessfile (этот класс позволяет доступа из любого места, не только чтения, но и записи), который непосредственно наследует от класса объекта и реализует интерфейсы DataInput и DataOutput.
Поскольку класс randomaccessfile реализует все методы, определенные в интерфейсах DataInput и DataOutput, он может считывать данные основного типа из файла и записывать данные основного типа в файл. В дополнение к методам, определенным в интерфейсах DataInput и DataOutput, класс randomAccessfile также определяет некоторые другие методы для поддержки случайного доступа.
Поток, созданный классом randomaccessfile, отличается от предыдущих входных и выходных потоков. Класс randomaccessfile не является ни подклассом класса InputStream в классе входного потока, ни подклассом класса outputstream в классе выходного потока. Однако направление потока, созданного классом randomaccessfile, может использоваться как источник и пункт назначения. Другими словами, при чтении и написании файла вы можете создать поток RandomAccessFile, указывающий на файл, чтобы вы могли прочитать данные файла из потока и записать данные в файл через поток.
Два метода конструктора класса randomaccessfile:
(1) randomaccessfile (имя строки, режим строки)
Имя параметра используется для определения имени файла, предоставляя источник (также пункт назначения потока) созданного потока, а режим параметра принимает R (только для чтения) или RW (считывается), который определяет права доступа созданного потока к файлу.
(2) randomaccessfile (файл файла, режим строки)
Файл параметров представляет собой файловый объект, который дает источник (также пункт назначения потока). Режим параметров принимает R (только для чтения) или RW (считывается) и определяет права доступа созданного потока к файлу. При создании объекта необходимо поймать filenotfoundexception; Когда поток выполняет операции чтения и записи, ioException должно быть поймано.
Метод считывания и написания информации объекта RandomAccessFile совпадает с методом ввода и вывода объекта данных. Он может получить доступ ко всем методам read () и write () в классах DataInputStream и DataOutputStream.
Как переместить файл Читать и записать указатели:
(1) Long GetFilePointer (): возвращает текущее местоположение указателя файла.
(2) void reak (long pos): поместите указатель файла в указанную абсолютную позицию. Значение позиции рассчитывается как смещение байта с начала файла. POS равен 0, что представляет начало файла.
(3) Long Length (): возвращает длину файла. Значение позиции - длину (), которое представляет конец файла.