Как считать с консоли путь к файлу java
Обновлено: 05.07.2024
Класс 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 предназначен прежде всего для записи двоичных файлов. Его можно использовать для работы с текстовыми файлами, но все же для этой задачи больше подходят другие классы.
Добавлено через 8 минут
уже разобрался, извиняюсь что тему создал.
А может кто знает как сделать чтоб слова на кирилице тоже сортировало?
Помощь в написании контрольных, курсовых и дипломных работ здесь
Как прописать путь к файлу с клавиатуры?
нужно ввести путь к файлу через клавиатуру средствами BIOS. Подскажите как это сделать! .model.
Как ввести путь к файлу с клавиатуры?
как ввести путь к файлу с клавиатуры?
Как показать путь к файлу с которой string должен считать текст?
Доброго времени суток, дорогие форумчани! Я создал Windows Forms в которой юзер должен выбрать.
нужно написать свой Comparator и при создании TreeSet передать ему его, но у меня по умолчанию итак всё сортирует в алфавитном порядке,
возможно потому что у меня по умолчанию UTF-8 mutagen, объясните пожалуйста по поводу кодировки, где Вы ставите UTF-8? Если в самом .java, то у меня после этого вообще не компилируется( Чтобы на кириллице появилась специфическая сортировка
нужно написать свой Comparator и при создании TreeSet передать ему его
Да не надо ничего дополнительно делать. Если прочитано всё правильно, в нужной кодировке, то дальше сортируется всё нормально.
Как читать из файла в нужной кодировке - тут:
я же написал специфическая, понятно что если кириллица считалась правильно то по дефолту и она отсортируется правильнл Как дать пользователю возможность указать путь к файлу, с которого необходимо считать данные
Здравствуйте, необходимо разработать программу вычисляющую площади различных фигур, при этом данные.
Как вручную с клавиатуры на консоль ввести путь (каталог) к файлу?
Надо вручную с клавиатуры на консоль ввести путь(каталог) к файлу p/s Это возможно ?
Как изменить код так, что бы путь к файлу задавался с клавиатуры?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using.
Элемент коллекции - путь к файлу, который нужно считать
Добрый ночь! Не могли бы Вы привести пример кода, где в цикле перебираются элементы коллекции.
Работа с файлами в 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 . Общая форма использования метода следующая
Решив разобраться в работе Ant и Maven, я поймал себя на том, что не смогу собрать приложение без них в консоли.
В данной статье я постарался уместить все этапы проектирования демонстрационного приложения, чтобы не искать справку по каждой команде на просторах Интернета.
От простого к .
Каждая программа обычно содержится в отдельном каталоге. Я придерживаюсь правила создавать в этом каталоге по крайней мере две папки: src и bin. В первой содержатся исходные коды, во второй — результат компиляции. В данных папках будет структура каталогов, зависящая от пакетов.
Один файл
Можно сделать и без лишних папок.
Берем сам файл HelloWorld.java.
Переходим в каталог, где лежит данный файл, и выполняем команды.
В данной папке появится файл HelloWorld.class. Значит программа скомпилирована. Чтобы запустить
Отделяем бинарные файлы от исходников
Теперь сделаем тоже самое, но с каталогами. Создадим каталог HelloWorld и в нем две папки src и bin.
Компилируем
Здесь мы указали, что бинарные файлы будут сохраняться в отдельную папку bin и не путаться с исходниками.
Используем пакеты
А то, вдруг, программа перестанет быть просто HelloWorld-ом. Пакетам лучше давать понятное и уникальное имя. Это позволит добавить данную программу в другой проект без конфликта имен. Прочитав некоторые статьи, можно подумать, что для имени пакета обязательно нужен домен. Это не так. Домены — это удобный способ добиться уникальности. Если своего домена нет, воспользуйтесь аккаунтом на сайте (например, ru.habrahabr.mylogin). Он будет уникальным. Учтите, что имена пакетов должны быть в нижнем регистре. И избегайте использования спецсимволов. Проблемы возникают из-за разных платформ и файловых систем.
Поместим наш класс в пакет с именем com.qwertovsky.helloworld. Для этого добавим в начало файла строчку
В каталоге src создадим дополнительные каталоги, чтобы путь к файлу выглядел так: src/com/qwertovsky/helloworld/HelloWorld.java.
Компилируем
В каталоге bin автоматически создастся структура каталогов как и в src.
Если в программе несколько файлов
HelloWorld.java
Adder.java
Ошибка возникла из-за того, что для компиляции нужны файлы с исходными кодами классов, которые используются (класс Calculator). Надо указать компилятору каталог с файлами с помощью ключа -sourcepath.
Компилируем
Если удивляет результат
Есть возможность запустить отладчик. Для этого существует jdb.
Сначала компилируем с ключом -g, чтобы у отладчика была информация.
Отладчик запускает свой внутренний терминал для ввода команд. Справку по последним можно вывести с помощью команды help.
Указываем точку прерывания на 9 строке в классе Calculator
Запускаем на выполнение.
Чтобы соориентироваться можно вывести кусок исходного кода, где в данный момент находится курссор.
Узнаем, что из себя представляет переменная а.
Выполним код в текущей строке и увидим, что sum стала равняться 2.
Поднимемся из класса Adder в вызвавший его класс Calculator.
Удаляем точку прерывания
Можно избежать захода в методы, используя команду next.
Проверяем значение выражения и завершаем выполнение.
Хорошо бы протестировать
Запускаем. В качестве разделителя нескольких путей в classpath в Windows используется ';', в Linux — ':'. В консоли Cygwin не работают оба разделителя. Возможно, должен работать ';', но он воспринимается как разделитель команд.
Создадим библиотеку
Класс Calculator оказался полезным и может быть использован во многих проектах. Перенесем всё, что касается класса Calculator в отдельный проект.
Измените также назавания пакетов в исходных текстах. В HelloWorld.java нужно будет добавить строку
Делаем архив jar
С помощью ключа -C мы запустили программу в каталоге bin.
Надо узнать, что у библиотеки внутри
Можно распаковать архив zip-распаковщиком и посмотреть, какие классы есть в библиотеке.
Информацию о любом классе можно получить с помощью дизассемблера javap.
Из результата видно, что класс содержит кроме пустого конструктора, ещё один метод sum, внутри которого в цикле вызывается метод add класса Adder. По завершении метода sum, вызывается Adder.getSum().
Без ключа -c программа выдаст только список переменных и методов (если использовать -private, то всех).
Лучше снабдить библиотеку документацией
Изменим для этого класс калькулятора.
Документацию можно создать следующей командой. При ошибке программа выдаст список возможных опций.
В результате получиться следующее
Можно подписать jar-архив
Если требуется подписать свою библиотеку цифровой подписью, на помощь придут keytool и jarsigner.
Генерируем подпись.
Генерируем Certificate Signing Request (CSR)
Содержимое полученного файла отправляем в центр сертификации. От центра сертификации получаем сертификат. Сохраняем его в файле (например, qwertokey.cer) и импортируем в хранилище
Файл qwertokey.cer отправляем всем, кто хочет проверить архив. Проверяется он так
Использование библиотеки
Есть программа HelloWorld, которая использует библиотечный класс Calculator. Чтобы скомпилировать и запустить программу, нужно присоединить библиотеку.
Компилируем
Собираем программу
Это можно сделать по-разному.
Первый способ
Здесь есть тонкости.
В строке
не должно быть пробелов в конце.
Вторая тонкость описана в [3]: в этой же строке должен стоять перенос на следующую строку. Это если манифест помещается в архив сторонним архиватором.
Программа jar не включит в манифест последнюю строку из манифеста, если в конце не стоит перенос строки.
Ещё момент: в манифесте не должно быть пустых строк между строками. Будет выдана ошибка «java.io.IOException: invalid manifest format».
При использовании команды echo надо следить только за пробелом в конце строки с main-class.
Второй способ
В данном способе избегаем ошибки с пробелом в main-class.
Третий способ
Включили код нужной библиотеки в исполняемый файл.
Запуск исполняемого jar-файла
Файл calculator.jar исполняемым не является. А вот helloworld.jar можно запустить.
Если архив был создан первыми двумя способами, то рядом с ним в одном каталоге должна находится папка lib с файлом calculator.jar. Такие ограничения из-за того, что в манифесте в class-path указан путь относительно исполняемого файла.
При использовании третьего способа нужные библиотеки включаются в исполняемый файл. Держать рядом нужные библиотеки не требуется. Запускается аналогично.
Как быть с приложениями JavaEE
Аналогично. Только библиотеки для компиляции нужно брать у сервера приложений, который используется. Если я использую JBoss, то для компиляции сервлета мне нужно будет выполнить примерно следующее
Структура архива JavaEE-приложения должна соответствовать определенному формату. Например
Способы запуска приложения на самом сервере с помощью командной строки для каждого сервера различны.
Надеюсь, данная статья станет для кого-нибудь шпаргалкой для работы с Java в командной строке. Данные навыки помогут понять содержание и смысл Ant-скриптов и ответить на собеседовании на более каверзные вопросы, чем «Какая IDE Вам больше нравится?».
Читайте также: