Как считать с консоли путь к файлу 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 . Общая форма использования метода следующая


Сейчас уже никто не создает программы в консоли. Используя любимую IDE, разработчик чувствует себя неуютно за чужим компьютером, где её нет.
Решив разобраться в работе 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, то всех).

Лучше снабдить библиотеку документацией

Изменим для этого класс калькулятора.

Документацию можно создать следующей командой. При ошибке программа выдаст список возможных опций.

image

В результате получиться следующее

Можно подписать 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 Вам больше нравится?».

Читайте также: