Sdscompany.ru

Компьютерный журнал
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Reader read java

Java.io.Reader класс в Java

Это абстрактный класс для чтения символьных потоков. Единственные методы, которые должен реализовывать подкласс, это read (char [], int, int) и close (). Однако большинство подклассов переопределяют некоторые из методов, определенных здесь, чтобы обеспечить более высокую эффективность, дополнительную функциональность или оба.
Конструкторы:

  • protected Reader (): Создает новый читатель потока символов, критические секции которого синхронизируются на самом читателе.
  • protected Reader (Object lock): Создает новое устройство чтения символьного потока, критические секции которого будут синхронизироваться с данным объектом.

Методы:

  • abstract void close (): закрывает поток и освобождает любые системные ресурсы, связанные с ним. Как только поток будет закрыт, дальнейшие вызовы read (), ready (), mark (), reset () или skip () вызовут IOException. Закрытие ранее закрытого потока не имеет никакого эффекта.
  • void mark (int readAheadLimit): отмечает текущую позицию в потоке. Последующие вызовы reset () будут пытаться переместить поток в эту точку. Не все потоки ввода символов поддерживают операцию mark ().
  • boolean markSupported (): сообщает, поддерживает ли этот поток операцию mark (). Реализация по умолчанию всегда возвращает false. Подклассы должны переопределить этот метод.
  • int read (): читает один символ. Этот метод будет блокироваться до тех пор, пока символ не станет доступным, не произойдет ошибка ввода-вывода или не будет достигнут конец потока.
    Подклассы, которые намереваются поддерживать эффективный односимвольный ввод, должны переопределить этот метод.
  • int read (char [] cbuf): читает символы в массив. Этот метод будет блокировать, пока не будет доступен какой-либо ввод, не произойдет ошибка ввода-вывода или не будет достигнут конец потока.
  • abstract int read (char [] cbuf, int off, int len): считывает символы в часть массива. Этот метод блокирует, пока не будет доступен какой-либо ввод, не произойдет ошибка ввода-вывода или не будет достигнут конец потока ,
  • int read (CharBuffer target): Пытается прочитать символы в указанном буфере символов. Буфер используется как хранилище символов как есть: единственные сделанные изменения — это результаты операции put. Переворот или перемотка буфера не выполняются.
  • boolean ready (): сообщает, готов ли этот поток для чтения.
  • void reset (): Сбрасывает поток. Если поток был помечен, попытайтесь изменить его положение на отметке. Если поток не был отмечен, попытайтесь сбросить его каким-либо образом, соответствующим конкретному потоку, например, переместив его в начальную точку. Не все потоки ввода символов поддерживают операцию сброса (), а некоторые поддерживают сброс () без поддержки метки ().
  • long skip (long n): пропускает символы. Этот метод блокируется, пока не будут доступны некоторые символы, не произойдет ошибка ввода-вывода или не будет достигнут конец потока.

// Java-программа, демонстрирующая методы Reader

Потоки Reader и Writer

Абстрактные классы Reader и Writer являются символьными потоками.

Абстрактный класс Reader

Класс Reader обеспечивает поддержку символьного потока чтения аналогично тому, как это делает InputStream, реализующий модель байтового потока ввода. Методы Reader схожи с теми, которые объявлены в составе InputStream.

Методы класса Reader

При реализации Reader требуется, чтобы производный класс (наследник) обеспечил практическое воплощение варианта метода read, осуществляющего чтение данных в массив символов, и версии метода close. Во многих случаях, однако, производительность операций может быть улучшена за счет переопределения в производных классах и других методов.

Наследники класса Reader

  • BufferedReader — буферизированный входной символьный поток; увеличивает производительность за счёт буферизации ввода;
  • CharArrayReader — входной поток чтения символьного массива;
  • FileReader — входной поток чтения содержимого файла; в конструкторе класса нужно указать либо путь к файлу, либо объект типа File;
  • FilterReader — фильтрующий читатель;
  • InputStreamReader — входной поток, транслирующий байты в символы;
  • LineNumberReader — входной поток, подсчитывающий строки;
  • PipedReader — входной канал;
  • PushbackReader — входной поток, позволяющий возвращать символы обратно в поток;
  • StringReader — входной поток, читающий из строки.
Читать еще:  Метод гаусса java

Класс BufferedReader

Широкораспространенный в использовании класс BufferedReader считывает текст из символьного потока ввода, буферизируя прочитанные символы. Использование буфера призвано увеличить производительность чтения данных из потока.

BufferedReader имеет следующие конструкторы :

Примеры BufferedReader

В качестве примера рассмотрим программу подсчета общего количества символов и числа пробелов в символьном потоке чтения:

Программе в качестве параметра передается имя файла в командной строке. Переменная in представляет символьный поток чтения. Если имя файла не задано, то используется стандартный поток ввода, System.in, после «вложения» его в объект типа InputStreamReader, который выполняет преобразование байтового потока ввода в символьный поток чтения. В противном случае создается объект типа FileReader, расширяющего класс Reader.

В цикле for подсчитывается общее количество символов в файле. Кроме этого, с использованием метода isWhitespace класса Character выявляются символы пробела и вычисляется их количество, а затем на экран выводится результат.

Абстрактный класс Writer

Абстрактный класс Writer обеспечивает поддержку символьного потока записи аналогично тому, как это делает OutputStream, реализующий модель байтового потока вывода. Многие методы Writer схожи с теми, которые объявлены в OutputStream; помимо этого, в классе Writer предусмотрены некоторые другие полезные версии метода write.

Методы класса Writer

Все методы класса вызывают исключение IOException при возникновении ошибки.

How to read file in Java – BufferedReader

In this article, we will show you how to use java.io.BufferedReader to read content from a file

1. Files.newBufferedReader (Java 8)

In Java 8, there is a new method Files.newBufferedReader(Paths.get(«file»)) to return a BufferedReader

2. BufferedReader

2.1 A classic BufferedReader with JDK 1.7 try-with-resources to auto close the resources.

2.2 In the old days, we have to close everything manually.

References

mkyong

Comments

Very good and “to the point” article! Congrats!

[…] visit How to read file from Java – BufferedReader Example 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 […]

Hello sir pls send me code of BufferReader…Sir please…

Congratulations, for your posts, is has helped me a lot!

Thanks a bunch! You just saved my day.

Excelent!
just for comment, in your first example, the line
“br = new BufferedReader(new FileReader(FILENAME));”
wasn’t necessary!

Thank you!
I learn a lot with you!

Thank you this is anice example.

Article is updated, thanks for your comment.

In your example, you should make sure to close the BufferedReader, otherwise the file may be lock not readable by some other process.

so
….
while ((sCurrentLine = br.readLine()) != null) <
System.out.println(sCurrentLine);
>

Example is updated, with new JDK7 example.

sir i want jtree tool coding for netbeans 6.9

great work done by grat man

somebody help this problem …
how to read this file 1
23
45

Finally after much searching, you answered my question, Mike ! Thanks ! There are a lot of people out in the web asking the same question. When they and, (up till a few moments ago), myself included, try to “import” a simple text file into an Eclipse project, we were all receiving “file not found”. Being new to Java I was amazed that this was such an “issue” for eclipse. I like Eclipse but something so fundamental, shouldn’t be so frustratingly hard. I guess the Devs are busy working on other more urgent issues and we cant complain as it … Read more »

Читать еще:  Справочник по javascript

Java 8 потоки ввода/вывода

Содержание

Введение

Поток ввода/вывода (I/O Stream) представляет собой источник данных или место их назначения. Потоки могут представлять собой абсолютно различные источники и места назначения: файлы на диска, устройства, сеть, другие программы, массивы в памяти т. д.

Потоки поддерживают большое количество различных типов данных: байты, примитивные типы, локализованные символы, объекты. Некоторые потоки просто передают данные, другие изменяют в соответствии со своими потребностями.

Независимо от внутреннего устройства потоки представляют собой одинаковую модель для программы. Поток представляет собой последовательность данных.

Потоки байт

Все классы, работающие с потоками байт, наследуются от абстрактных классов java . io . InputStream или java . io . OutputStream .

Диаграмма классов, показывающая иерархию основных дочерних классов для класса java.io.InputStream

Диаграмма классов, показывающая иерархию основных дочерних классов для класса java.io.OutputStream


Принцип работы с каждым из этих классов весьма схож. Важно знать методы java . io . InputStream и java . io . OutputStream , поскольку они наследуются в каждом из этих классов.

java.io.InputStream

Абстрактный класс, являющийся базовым классом для всех классов, представляющий поток ввода.

Основные методы:

Возвращает количество байт, которое может быть прочитано из потока без блокировки. Некоторые реализации InputStream возвращают полное количество байт в потоке, но не все. Не стоит использовать этот метод для определения размера буфера, который будет хранить все данные из потока.

Закрывает поток и освобождает все ресурсы.

Помечает текущую позицию во входной строке. Работает только если markSupported ( ) возвращает true . Смысл этого метода в том, что поток каким-нибудь образом запоминает все считанные после вызова этого метода данные и может вернуть те же самые данные ещё раз после вызова метода reset ( ) . Если после вызова метода mark ( int readLimit ) из потока было прочитано больше readLimit байт, то поток не обязан запоминать что бы то ни было.

Если метод markSupported ( ) возвращает true , то:

  • Если метод mark ( ) не был вызван ни разу, либо количество байт, которые были прочитаны из потока после вызова mark ( ) , больше аргумента метода mark ( ) в последнем его вызове, то может броситься исключение IOException .
  • Если исключение IOException не было брошено, то поток возвращается в такое состояние, что все вызовы методов read ( ) в дальнейшем будут возвращать те же данные, которые они возвращали с момента последнего вызова метода mark ( ) (либо с начала потока, если метод mark ( ) не был вызван ни разу).

Если метод markSupported ( ) возвращает false , то:

  • Вызов метода reset ( ) может бросить исключение IOException .
  • Если не бросается исключение IOException , то поток сбрасывается в фиксированное состояние, которое зависит от конкретного типа входного потока, и как он был создан. Байты, которые будут прочитаны при последующих вызовах методов read ( ) , зависят от конкретного типа входной строки.

Java Nio Read File Example

Posted by: Aaron Witter in Core Java August 9th, 2016 0 Views

With this example we are going to demonstrate how to use the Non-blocking I/O API, or NIO.2 API (NIO API) for short, to read the contents of a file. The examples in this article are compiled and run in a Mac OS unix environment.

Читать еще:  Справочник javascript на русском

Please note that Java SE 8 is required to run the code in this article.

1. Introduction to the NIO API

The NIO.2 API was introduced in Java 7 as a replacement for the java.io.File class. It provides a flexible, and intuitive API for use with files.

2. Creating a NIO Path

In order to read a file from the file system we must first create a Path to the file. A Path object is a hierarchical representation of the path on a system to the file or directory. The java.nio.file.Path interface is the primary entry point for working with the NIO 2 API.

The easiest way to create a Path Object is to use the java.nio.files.Paths factory class. The class has a static get() method which can be used to obtain a reference to a file or directory. The method accepts either a string, or a sequence of strings(which it will join to form a path) as parameters. A java.nio.file.Path , like a File , may refer to either an absolute or relative path within the file system. This is displayed in the following examples:

  • p1 creates a relative reference to a file in the current working directory.
  • p2 creates a reference to an absolute directory in a Unix based system.
  • p3 creates a reference to the absolute directory /animals/dogs/labradors

3. Reading files with the NIO API

Once we have a Path Object we are able to execute most of the operations that were previously possible with java.io.File .

3.1 Using NIO API with newBufferedReader()

The NIO.2 API has methods for reading files using java.io streams. The Files.newBufferedReader(Path,Charset) reads the file found at the Path location, using the specified Charset for character encoding. Here’s an example:

3.2 Using NIO API with readAllLines()

Another option is to use the Files.readAll() method, which will read the contents of a file and return them as an ordered list of strings. Here’s an example of this method:

NOTE: The readAllLines() method first commits the contents of the file to memory, as a result you may encounter an OutOfMemoryError if there is too much content.

3.3 Using NIO API with streams

With Java 8 came the introduction of streams in place of the previously used methods of iteration. This makes it easy to lazily load lines from a file, using memory in a piecemeal fashion, and therefore preventing the OutOfMemoryError which was mentioned above. The example below shows how to make use of streams to achieve this:

Stream operations can be chained together into pipelines, which can make for some very powerful, declarative and concise code. For example, making use of the filter() operation on the above code in combination with the NIO API, allows us to to begin to analyse the contents of the file with ease.

The example above shows how simply we are able to begin looking at Shakespeare’s lexical choices.

4. Summary

In this article we’ve introduced you several ways to use the NIO API to read a file from your file system. Along the way we’ve touched upon the Path object and let you know the benefits of using one method over another.

5. Download the Source Code

Below you can download the file read examples shown above:

Ссылка на основную публикацию
Adblock
detector