- 5 Способов чтения файла в Java – BufferedReader, FileInputStream, Файлы, Сканер, Случайный файл
- Различные способы чтения файла на Java
- Чтение двоичных файлов и текстовых файлов
- 1. BufferedReader Читает файл
- 2. FileInputStream – Считывание двоичных файлов в байты
- 3. Файлы – Чтение файла в список строк
- 4. Сканер – Считывает текстовый файл в качестве итератора
- 5. RandomAccessFile – Чтение файлов в режиме только для чтения
- Читайте ещё по теме:
- Java читает все форматы
- Запись файлов. Класс FileWriter
- Чтение файлов. Класс FileReader
- Rukovodstvo
- статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
- Чтение и запись CSV на Java
- Введение Это первая статья из короткой серии, посвященной библиотекам для чтения и записи CSV на Java [/ библиотеки-для-чтения-и-записи-csvs-in-java]. Чтение и запись CSV в Core Java Благодаря популярности и широкому использованию CSV в качестве формата для передачи данных существует множество библиотек синтаксического анализатора, которые можно использовать вместе с Java. Сторонние парсеры определяют общие форматы и могут работать с различными разделителями, обрабатывать специальные символы, а иногда даже читать не-b
- Вступление
- Чтение и запись CSV в Core Java
- Написание CSV на Core Java
- Заключение
5 Способов чтения файла в Java – BufferedReader, FileInputStream, Файлы, Сканер, Случайный файл
Как прочитать файл на Java? Мы можем использовать классы ввода-вывода Java для чтения текстовых и двоичных файлов, таких как изображения, pdf и т.д., Используя BufferedReader, FileInputStream.
Существует множество различных способов чтения файла на Java. В этом уроке мы рассмотрим 5 различных способов чтения файла на Java.
Различные способы чтения файла на Java
5 классов из API ввода-вывода Java для чтения файлов:
- Буферизатор
- Поток ввода файлов
- Файлы
- Сканер
- Случайный файл
Чтение двоичных файлов и текстовых файлов
- Класс FileInputStream считывает данные файла в поток байтов. Поэтому его следует использовать для двоичных файлов, таких как изображения, pdf, мультимедиа, видео и т.д.
- Текстовые файлы основаны на символах. Мы можем использовать классы Reader , а также потоковые классы для их чтения.
- Файлы и классы сканера можно использовать для чтения текстовых файлов, а не двоичных файлов.
Давайте рассмотрим примеры программ для чтения файла на Java.
1. BufferedReader Читает файл
Мы можем использовать BufferedReader для считывания содержимого текстового файла в массив символов .
BufferedReader эффективен для чтения файла, поскольку он буферизует входные данные из указанного файла. Без буферизации каждый вызов методов read() или readLine() будет считывать байты из файла, затем преобразовываться в символы и возвращаться, что будет очень неэффективно.
package com.journaldev.io.readfile; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class ReadFileUsingBufferedReader < public static void main(String[] args) < BufferedReader reader; char[] buffer = new char[10]; try < reader = new BufferedReader(new FileReader( "/Users/pankaj/Downloads/myfile.txt")); while (reader.read(buffer) != -1) < System.out.print(new String(buffer)); buffer = new char[10]; >reader.close(); > catch (IOException e) < e.printStackTrace(); >> >
В приведенной выше программе я печатаю данные файла на консоль. Давайте рассмотрим другой класс утилит для выполнения операций чтения файлов.
- Прочитайте полный файл в виде строки
- Считывайте файл строка за строкой и возвращайте список строк
- Подсчитайте вхождение строки в данный файл.
package com.journaldev.java; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class ReadFileJavaExample < /** * Main function to invoke different functions to * 1. readCompleteFileAsString - Read complete file as String * 2. readFileToListOfLines - Read lines from file and return list of line String * 3. countStringInFile - Count occurrence of a String in the file * @param args */ public static void main(String[] args) < String filePath = "/Users/pankaj/Downloads/myfile.txt"; String str="Java"; String fileData = readCompleteFileAsString(filePath); System.out.println("Complete File Data:"+fileData); ListlinesData = readFileToListOfLines(filePath); if(linesData!=null)< for(int i=0; i=""> readFileToListOfLines(String filePath) < List linesData = new ArrayList (); BufferedReader reader; try < reader = new BufferedReader( new FileReader(filePath)); >catch (FileNotFoundException e) < System.out.println("File is not present in the classpath or given location."); return null; >String line; try < while ((line=reader.readLine()) != null) < linesData.add(line); >> catch (IOException e) < System.out.println("IOException in reading data from file."); return null; >try < reader.close(); >catch (IOException e) < System.out.println("IOException in closing the Buffered Reader."); return null; >return linesData; > /** * This function will read complete file and return it as String * @param filePath * @return */ private static String readCompleteFileAsString(String filePath) < StringBuilder fileData = new StringBuilder(); BufferedReader reader; try < reader = new BufferedReader( new FileReader(filePath)); >catch (FileNotFoundException e) < System.out.println("File is not present in the classpath or given location."); return null; >char[] buf = new char[1024]; int numRead=0; try < while((numRead=reader.read(buf)) != -1)< String readData = String.valueOf(buf, 0, numRead); fileData.append(readData); buf = new char[1024]; >> catch (IOException e) < System.out.println("IOException in reading data from file."); return null; >try < reader.close(); >catch (IOException e) < System.out.println("IOException in closing the Buffered Reader."); return null; >return fileData.toString(); > >
2. FileInputStream – Считывание двоичных файлов в байты
Мы всегда должны использовать поток для чтения файлов, не основанных на символах, таких как изображения, видео и т.д.
package com.journaldev.io.readfile; import java.io.FileInputStream; import java.io.IOException; public class ReadFileUsingFileInputStream < public static void main(String[] args) < FileInputStream fis; byte[] buffer = new byte[10]; try < fis = new FileInputStream("/Users/pankaj/Downloads/myfile.txt"); while (fis.read(buffer) != -1) < System.out.print(new String(buffer)); buffer = new byte[10]; >fis.close(); > catch (IOException e) < e.printStackTrace(); >> >
Операция чтения FileInputStream используется с массивом байтов, в то время как операция чтения BufferedReader использует массив символов.
3. Файлы – Чтение файла в список строк
Файлы – это служебный класс, который был представлен в версии Java 1.7. Мы можем использовать его метод ReadAllLines() для чтения данных текстового файла в виде списка строк.
package com.journaldev.io.readfile; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; public class ReadFileUsingFiles < public static void main(String[] args) < try < ListallLines = Files.readAllLines(Paths.get("/Users/pankaj/Downloads/myfile.txt")); for (String line : allLines) < System.out.println(line); >> catch (IOException e) < e.printStackTrace(); >> >
4. Сканер – Считывает текстовый файл в качестве итератора
Мы можем использовать класс сканера для чтения текстового файла. Он работает как итератор
package com.journaldev.io.readfile; import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class ReadFileUsingScanner < public static void main(String[] args) < try < Scanner scanner = new Scanner(new File("/Users/pankaj/Downloads/myfile.txt")); while (scanner.hasNextLine()) < System.out.println(scanner.nextLine()); >scanner.close(); > catch (FileNotFoundException e) < e.printStackTrace(); >> >
5. RandomAccessFile – Чтение файлов в режиме только для чтения
Класс RandomAccessFile позволяет нам читать файл в разных режимах. Это хороший вариант, если вы хотите убедиться, что в файле не выполняется случайная операция записи.
package com.journaldev.io.readfile; import java.io.IOException; import java.io.RandomAccessFile; public class ReadFileUsingRandomAccessFile < public static void main(String[] args) < try < RandomAccessFile file = new RandomAccessFile("/Users/pankaj/Downloads/myfile.txt", "r"); String str; while ((str = file.readLine()) != null) < System.out.println(str); >file.close(); > catch (IOException e) < e.printStackTrace(); >> >
Это все для чтения файла на Java с использованием различных классов из Java IO API.
Читайте ещё по теме:
Java читает все форматы
Хотя с помощью ранее рассмотренных классов можно записывать текст в файлы, однако они предназначены прежде всего дл работы с бинарными потоками данных, и их возможностей для полноценной работы с текстовыми файлами недостаточно. И для этой цели служат совсем другие классы, которые являются наследниками абстрактных классов Reader и Writer .
Запись файлов. Класс FileWriter
Класс FileWriter является производным от класса Writer. Он используется для записи текстовых файлов.
Чтобы создать объект FileWriter, можно использовать один из следующих конструкторов:
FileWriter(File file) FileWriter(File file, boolean append) FileWriter(FileDescriptor fd) FileWriter(String fileName) FileWriter(String fileName, boolean append)
Так, в конструктор передается либо путь к файлу в виде строки, либо объект File, который ссылается на конкретный текстовый файл. Параметр append указывает, должны ли данные дозаписываться в конец файла (если параметр равен true), либо файл должен перезаписываться.
Запишем в файл какой-нибудь текст:
import java.io.*; public class Program < public static void main(String[] args) < try(FileWriter writer = new FileWriter("notes3.txt", false)) < // запись всей строки String text = "Hello Gold!"; writer.write(text); // запись по символам writer.append('\n'); writer.append('E'); writer.flush(); >catch(IOException ex) < System.out.println(ex.getMessage()); >> >
В конструкторе использовался параметр append со значением false — то есть файл будет перезаписываться. Затем с помощью методов, определенных в базовом классе Writer производится запись данных.
Чтение файлов. Класс FileReader
Класс FileReader наследуется от абстрактного класса Reader и предоставляет функциональность для чтения текстовых файлов.
Для создания объекта FileReader мы можем использовать один из его конструкторов:
FileReader(String fileName) FileReader(File file) FileReader(FileDescriptor fd)
А используя методы, определенные в базом классе Reader, произвести чтение файла:
import java.io.*; public class Program < public static void main(String[] args) < try(FileReader reader = new FileReader("notes3.txt")) < // читаем посимвольно int c; while((c=reader.read())!=-1)< System.out.print((char)c); >> catch(IOException ex) < System.out.println(ex.getMessage()); >> >
Также мы можем считывать в промежуточный буфер из массива символов:
import java.io.*; import java.util.Arrays; public class Program < public static void main(String[] args) < try(FileReader reader = new FileReader("notes3.txt")) < char[] buf = new char[256]; int c; while((c = reader.read(buf))>0) < if(c < 256)< buf = Arrays.copyOf(buf, c); >System.out.print(buf); > > catch(IOException ex) < System.out.println(ex.getMessage()); >> >
В данном случае считываем последовательно символы из файла в массив из 256 символов, пока не дойдем до конца файла в этом случае метод read возвратит число -1.
Поскольку считанная порция файла может быть меньше 256 символов (например, в файле всего 73 символа), и если количество считанных данных меньше размера буфера (256), то выполняем копирование массива с помощью метода Arrays.copy. То есть фактически обрезаем массив buf, оставляя в нем только те символы, которые считаны из файла.
Rukovodstvo
статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
Чтение и запись CSV на Java
Введение Это первая статья из короткой серии, посвященной библиотекам для чтения и записи CSV на Java [/ библиотеки-для-чтения-и-записи-csvs-in-java]. Чтение и запись CSV в Core Java Благодаря популярности и широкому использованию CSV в качестве формата для передачи данных существует множество библиотек синтаксического анализатора, которые можно использовать вместе с Java. Сторонние парсеры определяют общие форматы и могут работать с различными разделителями, обрабатывать специальные символы, а иногда даже читать не-b
Вступление
Это первая статья из короткой серии, посвященной библиотекам для чтения и записи CSV на Java .
Чтение и запись CSV в Core Java
Благодаря популярности и широкому распространению CSV в качестве формата для передачи данных существует множество библиотек синтаксического анализатора, которые можно использовать вместе с Java.
Сторонние парсеры определяют общие форматы и могут работать с различными разделителями, обрабатывать специальные символы и иногда даже читать недвоичные данные. Однако не всем программам требуются все эти функции, поэтому по-прежнему важно иметь возможность обрабатывать файлы CSV с помощью ядра Java без использования каких-либо дополнительных библиотек.
Простая комбинация FileReader , BufferedReader и String.split() может облегчить чтение данных из CSV. Давайте рассмотрим шаги, чтобы открыть базовый файл CSV и проанализировать содержащиеся в нем данные:
- Используйте FileReader чтобы открыть файл CSV
- Создайте BufferedReader и прочитайте файл построчно, пока не будет достигнут символ «Конец файла» ( EOF).
- Используйте метод String.split() чтобы определить разделитель запятой и разделить строку на поля.
BufferedReader csvReader = new BufferedReader(new FileReader(pathToCsv)); while ((row = csvReader.readLine()) != null) < String[] data = row.split(","); // do something with the data >csvReader.close();
data будет содержать список полей в каждой строке файла, найденного в расположении файла pathToCsv Если в CSV-файле есть разделитель, отличный от запятой, его можно указать в методе split Например, еще одним распространенным разделителем является вкладка для файлов TSV (Tab-Separated-Value).
Данные могут быть переданы в отдельный метод для обработки или записи в базу данных из цикла или сохранены в коллекции Java для дальнейшего использования. Например, если вы записываете большой объем данных в базу данных, нарушений ограничений (например, нарушений первичного ключа), вызванных человеческими ошибками при создании CSV, можно избежать с помощью хэш-карты. Если в CSV есть повторяющаяся запись, хэш-карта сохранит самое последнее «прочитанное» и перезапишет предыдущую запись.
Поскольку вы пишете синтаксический анализатор с нуля, вам необходимо самостоятельно позаботиться о простой обработке ошибок. Например, если вы не уверены, существует ли файл, всегда безопаснее заключить операцию чтения в блок try/catch или добавить логику для определения существования файла перед обработкой.
Чтобы проверить, существует ли файл, в наш код можно внести следующие изменения:
File csvFile = new File(pathToCsv); if (csvFile.isFile()) < // create BufferedReader and read data from csv >
С некоторой простой обработкой ошибок и строгими требованиями к формату CSV создание простого анализатора самостоятельно с использованием основных компонентов Java — задача, которую может взять на себя большинство программистов.
Написание CSV на Core Java
Большинство сторонних парсеров также поддерживают запись в файлы CSV. Однако есть простой способ записи в файлы CSV, как и в файлы любого другого типа, без использования каких-либо библиотек.
Самый простой способ — использовать FileWriter и обрабатывать файл CSV как любой другой текстовый файл. В нашем примере данные хранятся в некоторых List , которые мы просто перебираем и добавляем в средство записи:
// Our example data List> rows = Arrays.asList( Arrays.asList("Jean", "author", "Java"), Arrays.asList("David", "editor", "Python"), Arrays.asList("Scott", "editor", "Node.js") ); FileWriter csvWriter = new FileWriter("new.csv"); csvWriter.append("Name"); csvWriter.append(","); csvWriter.append("Role"); csvWriter.append(","); csvWriter.append("Topic"); csvWriter.append("\n"); for (List rowData : rows) < csvWriter.append(String.join(",", rowData)); csvWriter.append("\n"); >csvWriter.flush(); csvWriter.close();
При использовании FileWriter всегда убеждайтесь, что вы сбрасываете и закрываете поток. Это улучшает производительность операции ввода-вывода и указывает на то, что в выходной поток больше нет данных для записи.
Заключение
Существует несколько способов чтения и записи файлов CSV в Java, самый простой из которых — использовать компоненты Core Java. Хотя это также делает вас более уязвимым для ошибок и будет менее надежным, чем проверенное стороннее решение.
Если вам интересно узнать о других способах чтения и записи CSV на Java, обязательно ознакомьтесь с другими нашими статьями:
Licensed under CC BY-NC-SA 4.0