Как считать имя файла с консоли java
Консоль (console) в Java обеспечивает простое и удобное взаимодействия с пользователем. С помощью консоли можно выводить какую-нибудь информацию либо, напротив, используя консоль, считывать данные. В этой статье будет рассказано о том, как осуществляется ввод и вывод данных в консоли Java.
Чтобы обеспечивать взаимодействие с консолью, в языке программирования Java используют класс System.
Вывод на консоль в Java
Чтобы создать потока вывода в вышеупомянутый класс System, вам понадобится специальный объект out. В нём определен метод println, обеспечивающий вывод значения на консоль и перевод курсора консоли на другую строку.
Рассмотрим практический пример с Hello world:
Что здесь происходит? В метод println осуществляется передача значения (в нашем случае это строка), которое пользователь желает вывести в консоль Java. Консольный вывод данных в Джава будет следующий:
Выполнять перевод строки не обязательно. Если необходимость в этом отсутствует, применяют метод System.out.print() . Он аналогичен println, но перевод каретки на следующую строку не выполняется.
Вывод в консоли Java:
Однако никто не мешает, используя System.out.print, всё же выполнить перенос на следующую строку. Как вариант — использование \n:
Также есть возможность подставить в строку Ява данные, которые объявлены в переменных. Вот, как это реализуется:
В консоли увидим:
Ещё в Java существует функция, предназначенная для форматирования вывода в консоли, — System.out.printf() . При использовании со спецификаторами, она позволяет добиться нужного формата вывода.
Спецификаторы: • %d — для вывода в консоль целочисленных значений; • %x — для 16-ричных чисел; • %f — выводятся числа с плавающей точкой; • %e — для чисел в экспоненциальной форме (1.3e+01); • %c — вывод в консоль одиночного символа; • %s — вывод в консоль строковых значений.
Рассмотрим, как это функционирует на практике:
Когда осуществляется вывод в консоль Java значений с плавающей точкой, есть возможность задать количество знаков после запятой. Спецификатор %.2f (точнее, «.2») определяет, что будет 2 знака после запятой. Вывод в консоль Java будет следующим:
Ввод с консоли Java или как ввести данные с консоли Джавы
Чтобы обеспечить ввод с консоли Java, в классе System есть объект in. Именно через объект System.in работать не очень удобно, поэтому часто применяют класс Scanner. Он уже, в свою очередь, как раз таки и применяет System.in.
Рассмотрим практический пример:
Сам по себе класс Scanner хранится в пакете java.util, поэтому в начале кода мы выполняем его импорт посредством команды import java.util.Scanner.
Для создания непосредственно объекта Scanner в его конструктор осуществляется передача объекта System.in. Далее можно получать значения. В нашей мини-программе сначала выводится просьба ввести номер, а потом введённое пользователем число помещается в переменную num (для получения введённого значения задействуется метод in.nextInt() , возвращающий набранное на клавиатуре целочисленное значение.
Лучше всего попробовать работу этой программы с помощью одного из многочисленных онлайн-компиляторов.
Для класса Scanner предусмотрены и другие методы: • next() — для считывания введённой строки до первого пробела; • nextLine() — для всей введённой строки; • nextInt() — считывает введённое число int; • nextDouble() — для double; • nextBoolean() — для boolean; • nextByte() — для byte; • nextFloat() — для float; • nextShort() — для short.
Давайте напишем простую программу, обеспечивающую ввод информационных данных о человеке в консоль Java:
В этой программке пользователь последовательно вводит данные разных типов: String, int и float. Потом вся информация выводится в консоль Java:
Вот и всё. Это базовые вещи, если же вас интересуют более продвинутые знания, записывайтесь на курс OTUS в Москве:
Как прочитать файл на Java? Мы можем использовать классы ввода-вывода Java для чтения текстовых и двоичных файлов, таких как изображения, pdf и т.д., Используя BufferedReader, FileInputStream.
Существует множество различных способов чтения файла на Java. В этом уроке мы рассмотрим 5 различных способов чтения файла на Java.
Различные способы чтения файла на Java
5 классов из API ввода-вывода Java для чтения файлов:
- Буферизатор
- Поток ввода файлов
- Файлы
- Сканер
- Случайный файл
Чтение двоичных файлов и текстовых файлов
- Класс FileInputStream считывает данные файла в поток байтов. Поэтому его следует использовать для двоичных файлов, таких как изображения, pdf, мультимедиа, видео и т.д.
- Текстовые файлы основаны на символах. Мы можем использовать классы Reader , а также потоковые классы для их чтения.
- Файлы и классы сканера можно использовать для чтения текстовых файлов, а не двоичных файлов.
Давайте рассмотрим примеры программ для чтения файла на Java.
1. BufferedReader Читает файл
Мы можем использовать BufferedReader для считывания содержимого текстового файла в массив символов .
BufferedReader эффективен для чтения файла, поскольку он буферизует входные данные из указанного файла. Без буферизации каждый вызов методов read() или readLine() будет считывать байты из файла, затем преобразовываться в символы и возвращаться, что будет очень неэффективно.
В приведенной выше программе я печатаю данные файла на консоль. Давайте рассмотрим другой класс утилит для выполнения операций чтения файлов.
- Прочитайте полный файл в виде строки
- Считывайте файл строка за строкой и возвращайте список строк
- Подсчитайте вхождение строки в данный файл.
2. FileInputStream – Считывание двоичных файлов в байты
Мы всегда должны использовать поток для чтения файлов, не основанных на символах, таких как изображения, видео и т.д.
Операция чтения FileInputStream используется с массивом байтов, в то время как операция чтения BufferedReader использует массив символов.
3. Файлы – Чтение файла в список строк
4. Сканер – Считывает текстовый файл в качестве итератора
Мы можем использовать класс сканера для чтения текстового файла. Он работает как итератор
5. RandomAccessFile – Чтение файлов в режиме только для чтения
Класс RandomAccessFile позволяет нам читать файл в разных режимах. Это хороший вариант, если вы хотите убедиться, что в файле не выполняется случайная операция записи.
Это все для чтения файла на Java с использованием различных классов из Java IO API.
Работа с файлами в Java. Класс File . Основные методы работы
В данной теме расписаны базовые методы класса File , который есть частью системы ввода/вывода Java. Для рассмотренных методов приведены примеры с объяснениями.
Содержание
- 1. Создание экземпляра класса File . Конструкторы класса
- 2. Метод getName() . Получить имя файла или каталога
- 3. Метод getPath() . Получить имя файла
- 4. Метод isAbsolute() . Определить, указан ли полный путь к файлу
- 5. Метод getAbsolutePath() . Получить полный путь к файлу
- 6. Методы canRead() , canWrite() . Определение того, допускает ли файловый объект чтение и запись
- 7. Метод exists() . Определение наличия файла (каталога)
- 8. Метод isDirectory() . Определить, связан ли файловый объект с директорием
- 9. Метод isFile() . Определить, связан ли файловый объект с файлом
- 10. Метод isHidden() . Определить, есть ли файловый объект скрытым
- 11. Метод length() . Определить размер в байтах файла, который связан с файловым объектом
- 12. Метод delete() . Удаление файла
- 13. Метод mkdir() . Создание папки или каталога
- 14. Метод mkdirs() . Создание нескольких вложенных папок
- 15. Метод renameTo() . Переименование файла
- 16. Метод getTotalSpace() . Определение объема диска
- 17. Метод getFreeSpace() . Определить свободное место на диске
- 18. Метод getUsableSpace() . Определение полезного места на диске
Поиск на других ресурсах:
1. Создание экземпляра класса File . Конструкторы класса
В классе File реализованы несколько конструкторов, каждый из которых позволяет формировать имя файла или каталога разными способами.
Наиболее распространенным есть конструктор, который получает строку типа String . В этой строке задается полное (абсолютное) или сокращенное (относительное) имя файла или каталога, который рассматривается (создается, определяется и т.п.).
Также существуют конструкторы, формирующие имя файла из нескольких частей.
Пример.
Результат выполнения программы
2. Метод getName() . Получить имя файла или каталога
Метод getName() возвращает имя файла или каталога, с которым связана файловая переменная. Если абсолютный путь к имени файла (каталога) содержит несколько уровней вложения, то возвращается непосредственно имя этого файла (каталога). Общая форма использования метода следующая
- name – переменная типа String , которая есть результатом выполнения метода;
- fileObj – файловый объект, связанный с файлом или каталогом.
Пример.
- path – строка типа String , что есть именем файла (каталога), которое было задано при создании файловой переменной fileObj .
Пример.
4. Метод isAbsolute() . Определить, указан ли полный путь к файлу
Метод isAbsolute() позволяет определить, указан ли полный путь к файлу при создании файлового объекта в конструкторе класса File . Общая форма использования метода следующая
- res – результат, который равен true , если при создании файловой переменной fileObj был задан абсолютный путь.
Пример.
5. Метод getAbsolutePath() . Получить полный путь к файлу
Метод getAbsolutePath() возвращает полный путь к файлу. Общая форма использования метода следующая
- path – строка типа String , которая есть результатом;
- fileObj – файловый объект, который связан с файлом, для которого нужно определить абсолютный путь.
Пример.
Результат работы программы
7. Метод exists() . Определение наличия файла (каталога)
Метод exists() предназначен для определения существования файла, ассоциированного с файловым объектом. Общая форма использования метода следующая
- res – результат работы метода. Если res = true , то заданный файл существует;
- fileObj – объект, который проверяется.
Пример.
8. Метод isDirectory() . Определить, связан ли файловый объект с директорием
Метод isDirectory() предназначен для определения того, есть ли файл директорием (папкой). Общая форма использования метода следующая
- res – значение типа bool . Если res=true , то файл есть директорием;
- fileObj – файловый объект, который проверяется.
Пример.
9. Метод isFile() . Определить, связан ли файловый объект с файлом
Метод isFile() возвращает true , если файловый объект связан с файлом. Общая форма использования метода следующая
- res – результат вычисления. Если файловый объект есть файлом, то res = true ;
- fileObj – файловый объект.
Пример.
10. Метод isHidden() . Определить, есть ли файловый объект скрытым
- fileObj – файловый объект;
- res – результат работы метода. Если res = true , то файловый объект связан со скрытым файлом.
Пример.
11. Метод length() . Определить размер в байтах файла, который связан с файловым объектом
Метод length() предназначен для определения размера файла и имеет следующую общую форму
Пример.
Результат работы программы
12. Метод delete() . Удаление файла
Метод delete() используется для удаления файла. Общая форма использования метода
- fileObj – файловый объект, который связан с файлом, который нужно удалить;
- res – результат выполнения метода. Если res = true , то удаление файла состоялось успешно.
Пример.
13. Метод mkdir() . Создание папки или каталога
Метод mkdir() используется для создания папки (каталога). Общая форма использования метода следующая
- res – результат типа bool . Если каталог создан успешно, то res = true , в противном случае res = false ;
- fileObj – объект типа File , который связан с именем создаваемого каталога.
Пример. Создается каталог с именем 123 в текущем каталоге.
Результат работы программы
14. Метод mkdirs() . Создание нескольких вложенных папок
Метод mkdirs() позволяет создать несколько уровней вложений папок за один раз. В отличие от метода mkdir() , этот метод создает уровни вложения папок, которые не существуют. В методе mkdir() чтобы создать подпапку нужно, чтобы предварительно обязательно была созданная папка верхнего уровня.
Общая форма использования метода следующая:
- fileObj – файловый объект, который содержит строку с именем или именами папок, которые нужно создать;
- res – результат выполнения метода. Если последовательность папок создана успешно, то res = true .
Пример.
15. Метод renameTo(File). Переименование файла
Метод renameTo() предназначен для переименования файла. Общая форма использования метода следующая
- res – результат выполнения метода. Если файл переименован успешно, то res = true , иначе res = false ;
- f1 – файловая переменная, соответствующая файлу-источнику, который нужно переименовать;
- f2 – файловая переменная, соответствующая новому имени файла-источника f1 после его переименования.
Пример.
16. Метод getTotalSpace() . Определение объема диска
С помощью метода getTotalSpace() можно определить общий размер носителя (диска) в байтах. Метод возвращает результат типа long . Общая форма использования метода следующая
Класс File пакета java.io используется для управления информацией о файлах и каталогах. На уровне операционной системы файлы и каталоги имеют существенные отличия, но в Java они описываются одним классом File. Каталог в Java трактуется как обычный файл, но с дополнительным свойством — списком имен файлов, который можно просмотреть с помощью метода list.
В зависимости от назначения объект File - файл или каталог, можно использовать один из конструкторов для создания объекта:
Примеры создания объектов File
Свойства и методы класса File
Для определения стандартных свойств файла в классе File имеются различные методы. Однако класс File несимметричен, т.е. методы определения свойств объекта существуют, но соответствующие функции для изменения этих свойств отсутствуют.
Функции | Описание |
---|---|
String getName() | Наименование файла или каталога. |
String getParent() | Наименование родительского каталога. |
long length() | Функция определения размера файла в байтах. |
String getAbsolutePath() | Функция определения абсолютного пути файла или каталога. |
boolean delete() | Удаления файла или каталога. |
boolean exists() | Проверка существования файла или каталога. |
boolean isDirectory() | Проверка, является ли данный объект каталогом. |
boolean isFile() | Проверка, является ли данный объект файлом. |
long lastModified() | Функция определения даты последней модификации файла. |
boolean canRead() | Проверка, можно ли читать данные из файла. |
boolean canWrite() | Проверка, можно ли записывать данные в файл. |
boolean isHidden() | Проверка, являются ли каталог или файл скрытыми. |
String[] list() | Чтение массива наименований файлов и подкаталогов. |
File[] listFiles() | Чтение массива файлов и подкаталогов. |
boolean mkdir() | Создание нового каталога. |
boolean renameTo(File dest) | Переименовывание файла или каталога. |
В следующем примере открываем файл "d:/test/MyFile.txt" (Windows) и извлекаем его характеристики:
В консоли будет отпечатана следующая информация:
Интерфейс FileFilter
Класс File включает метод, позволяющий прочитать список только определенных файлов.
В отличие от одноименного метода, но без параметра, данный метод отбирает только те файлы каталога, которые удовлетворяют определенному условию. Параметр filter предназначен для задания этого условия. При этом тип параметра FileFilter — это не класс, а интерфейс, который имеет всего один метод, возвращающий true, если файл удовлетворяет определенным условиям, и false в противном случае.
Метод listFiles будет вызывать метод accept для каждого файла в каталоге, и те, для которых accept вернет true, будут включены в результирующий список. Остальные будут проигнорированы.
Для использования FileFilter необходимо создать объект и определить в нем соответствующий метод accept.
Пример использования фильтра FileFilter
Чтение содержимого файла FileInputStream
Для чтения содержимого файла можно использовать класс FileInputStream, который является наследником класса InputStream и реализует все его методы. Конструктор класса FileInputStream :
Если файл не может быть открыт то генерируется исключение FileNotFoundException.
Пример считывания данных из файла и вывод содержимого в консоль:
Данные файла можно считать в массив байтов :
Класс FileInputStream предназначен прежде всего для работы с двоичными файлами. Его можно использовать для работы с текстовыми файлами, но все же для этой задачи больше подходят другие классы.
Пример использования FileInputStream для чтения файла свойств в кодировке UTF-8:
Файл свойств "data.properties" в кодировке UTF-8:
Запись в файл FileOutputStream
Класс FileOutputStream, является производным от класса OutputStream, поэтому наследует всю его функциональность.
Пример записи строки в файл:
Для создания объекта FileOutputStream используется конструктор, принимающий в качестве параметра путь к файлу для записи. Для записи строки ее сначала переводим в массив байт и с помощью метода write строка записывается в файл. Необязательно записывать весь массив байтов. Используя перегрузку метода write(), можно записать и одиночный байт:
Пример перезаписи содержимого из одного файла в другой:
Класс FileOutputStream предназначен прежде всего для записи двоичных файлов. Его можно использовать для работы с текстовыми файлами, но все же для этой задачи больше подходят другие классы.
Продолжаем изучать стандартную библиотеку Java и сегодня у нас система ввода и вывода. Мы наконец узнаем, как работает механизм ввода данных с консоли, и файла чтобы не просто копировать куски кода, как мы это делали в прошлых статьях, но и осмысленно писать свой код. Напоминаю, что в прошлой статье мы познакомились с работой со строковыми данными, положив начало изучению стандартных средств языка Java.
Вообще, Java очень богата на методы стандартных классов и зачастую, их может хватить на разработку серьезных приложений. В частности, работа с файлами и ввод/вывод можно организовать стандартными средствами, уложившись в пару строчек кода.
Когда говорят о потоках ввода или вывода, обычно подразумевают файл или передачу по сети, иногда консоль. В Java неважно с каким видом ввода/вывода Вы работаете. Для всех средств нужно создать поток (stream) и уже работать с ним. Ввод представлен в классе InputStream, вывод — в OutputStream. Они обеспечивают общий интерфейс для всех подклассов. Все подклассы, которые от них наследуются реализуют ввод/вывод для разных форм данных. Stream инкапсулирует процессы низкого уровня. Алгоритм работы с потоковой передачей следующий:
- Создается поток
- Поток открыт
- Выполняет любое необходимое действие.
- Поток закрыт.
Вот все 4 действия, которые нужно совершить, чтобы считать или записать данные. На практике все станет еще проще. Прежде чем мы начнем программировать нужно, чтобы Вы посмотрели на схему классов, которые наследуются от InputStream и OutputStream. Запоминать их необязательно, нужно просто понимать иерархию.
Название классов говорят, какой из них за что отвечает.
Хочу обратить Ваше внимание на классах BufferedInputStream и BufferedOutputStream. Они позволяют работать с потоком не напрямую, а через буфер. Это значительно улучшает производительность программы.
Еще очень интересный класс RandomAccessFile. Он позволяет одновременно и читать и писать в файл. Для файла используется класс File, в конструктор которого можно прописать путь к файлу:
import java.io.File ;
import java.io.FileNotFoundException ;
import java.io.IOException ;
import java.io.RandomAccessFile ;
Наш файл test.txt до запуска программы:
test.txt после запуска программы:
Как видите, запись перезаписала первую строку. В классе RandomAccessFile есть метод который позволяет читать и записывать в файл с определенной точки: randomAccessFile.seek(количество символов начиная с начала). Используя этот метод, можно писать файл и не перезаписывать предыдущие записи.
Хотя вышеперечисленные классы позволяют работать с потоком, Вы не можете напрямую прочитать или записать текст.В примере выше нам приходилось кастить байты к char и переводить строку в байты. Для того, чтобы увидеть символы без ухищрений в читаемом для человека формате нужно использовать классы Reader и Writer. Эти классы похожие на BufferedInputStream и BufferedOutputStream только позволяют работать с символами в формате юникод. Вот их иерархия:
Вот пример чтения и записи файла используя BufferedReader и BufferedWriter:
import java.io.BufferedReader ;
import java.io.BufferedWriter ;
import java.io.FileInputStream ;
import java.io.FileOutputStream ;
import java.io.IOException ;
import java.io.InputStreamReader ;
import java.io.OutputStreamWriter ;
import java.io.PrintWriter ;
import java.io.StringReader ;
Что касается класса Scanner. Это простой текстовый сканер, который может анализировать примитивные типы и строки, используя регулярные выражения. С его применением мы уже знакомы. Scanner может не только читать ввод с консоли. Им также можно читать файлы:
import java.io.File ;
import java.io.FileNotFoundException ;
import java.util.Scanner ;
Ну вот, пожалуй, и все что касается системы ввода/вывода и работы с файлами. Это не единственные но самые распространенные способы чтения/записи.
Читайте также: