кодесурса

Java: чтение файла

script1adsense2code
script1adsense3code

Вступление

В Java есть концепция работы с потоками данных. Можно сказать, что Java-программа читает последовательности байтов из входного потока (или записывает в выходной поток): байт за байтом, символ за символом, примитив после примитива. Соответственно, Java определяет различные типы классов, поддерживающих потоки, например, InputStream или OutputStream. Существуют классы, специально предназначенные для чтения символьных потоков, такие как Reader и Writer.

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

Ниже приведен список очень важных классов библиотеки Java, связанных с потоками.

Учебный класс Описание
InputStream Абстрактный класс, содержащий методы для выполнения ввода
OutputStream Абстрактный класс, содержащий методы для выполнения вывода
FileInputStream Дочерний элемент InputStream, который предоставляет возможность чтения с файлов на диске
FileOutputStream Дочерний элемент OutputStream, который предоставляет возможность записи в файлы на диске
PrintStream Дочерний элемент FilterOutputStream, который является дочерним по отношению к OutputStream; PrintStream обрабатывает вывод на стандартное (или стандартное) устройство вывода системы, обычно на монитор
BufferedInputStream Дочерний элемент FilterInputStream, который является дочерним по отношению к InputStream; BufferedInputStream обрабатывает ввод со стандартного (или стандартного) устройства ввода системы, обычно с клавиатуры

ЧТЕНИЕ С ФАЙЛА

Мы напишем Java-программу для чтения из файла и печати данных на экране пользователя. Давайте разберемся, как связать объект File с входным потоком:

  • Вы можете передать имя файла конструктору класса FileInputStream.
  • Вы можете создать объект File, передав имя файла конструктору File. Затем вы можете передать объект File в конструктор класса FileInputStream.

Второй метод имеет некоторые преимущества: если вы создаете объект File, вы можете использовать методы класса File, такие как exist () и lastModified (), для получения информации о файле. (См. Учебник по вводу и выводу файлов).

При работе с потоковыми классами мы должны заботиться о проверенных исключениях. В нашей программе мы делаем это с помощью блока try-catch.

Java-код:

package filepackage;
import java.io.*;
public class FileReadingDemo {
	public static void main(String[] args) {
		InputStream istream;
		OutputStream ostream;
		int c;
		final int EOF = -1;
		ostream = System.out;
		try {
			File inputFile = new File("Data.txt");
			istream = new FileInputStream(inputFile);
			try {
				while ((c = istream.read()) != EOF)
					ostream.write(c);
			} catch (IOException e) {
				System.out.println("Error: " + e.getMessage());
			} finally {
				try {
					istream.close();
					ostream.close();
				} catch (IOException e) {
					System.out.println("File did not close");
				}
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			System.exit(1);
		}
	}
}

Если файл отсутствует в корневом каталоге, мы получим следующую ошибку.

«каталог

После создания файла в корневой директории проекта, мы получим содержимое файла в качестве вывода.

Расположение файла

«каталог

«каталог

Хотя классы потока байтов предоставляют достаточную функциональность для обработки любого типа операций ввода-вывода, они не могут работать напрямую с символами Юникода. Поскольку одной из основных целей Java является поддержка философии «пиши один раз, беги куда угодно», необходимо было включить прямую поддержку ввода-вывода для символов. Теперь мы рассмотрим Java-программу, использующую поток символов для чтения файла. Это очень похоже на FileInputStream, но JVM относится к нему по-другому. В приведенной ниже программе мы не обрабатываем исключение с помощью блока try-catch, но добавляем предложение throws в объявление метода. Вывод будет таким же, как указано выше программы.

Java-код:

package filepackage;
import java.io.*;
public class FileReadingCharacterStream {
	public static void main(String[] args) throws IOException{
		FileReader freader = new FileReader("Data.txt");
		BufferedReader br = new BufferedReader(freader);
		String s;
		while((s = br.readLine()) != null) {
		System.out.println(s);
		}
		freader.close();
	}
}

Мы можем написать ту же программу, используя синтаксис Java 7, где нам не нужно беспокоиться о закрытии ресурсов File и Stream. Вывод будет точно таким же, как и в приведенной выше программе.

Java-код:

package filepackage;
import java.io.*;
public class FileReadingJava7Way {
	public static void main(String[] args) {
		File file = new File("Data.txt");
		try (FileInputStream fis = new FileInputStream(file)) {
 			int content;
			while ((content = fis.read()) != -1) {
				// convert to char and display it
				System.out.print((char) content);
			} 
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

Резюме

  • Java-программа читает последовательности байтов / символов с использованием входных потоков.
  • Чтение файла - это пошаговый процесс, который начинается с создания файлового объекта (открытия файла), передачи файлового объекта во входной поток, чтения данных потока и обработки и, наконец, закрытия потока и файлового объекта.
  • Мы обсудили различные способы чтения файла, а также обработки исключения.

Редактор кода Java:

Предыдущий: Ввод и вывод файла
Далее: Запись файла

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code