Java, как включить файл Java

Обновлено: 04.07.2024

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

  • Встроенные пакеты (пакеты из Java API)
  • Определяемые пользователем пакеты (создавайте собственные пакеты)

Встроенные пакеты

Java API – это бесплатная библиотека предварительно написанных классов, включенных в среду разработки Java.

Библиотека разделена на пакеты и классы. Это означает, что вы можете либо импортировать один класс (вместе с его методами и атрибутами), либо целый пакет, содержащий все классы, принадлежащие указанному пакету.

Чтобы использовать класс или пакет из библиотеки, необходимо использовать ключевое слово import:

Синтаксис

Импортировать класс

Если вы найдете класс, который хотите использовать, например класс Scanner, который используется для ввода данных пользователем, напишите следующий код:

Пример

В приведенном выше примере java.util — это пакет, а Scanner — это класс пакета java.util.

Чтобы использовать класс Scanner, создайте объект класса и используйте любой из доступных методов, описанных в документации по классу Scanner. В нашем примере мы будем использовать метод nextLine(), который используется для чтения полной строки:

Пример

Использование класса Scanner для получения пользовательского ввода:

Импорт пакета

Есть множество пакетов на выбор. В предыдущем примере мы использовали класс Scanner из пакета java.util. Этот пакет также содержит функции даты и времени, генератор случайных чисел и другие служебные классы.

Чтобы импортировать весь пакет, завершите предложение знаком звездочки ( * ). В следующем примере будут импортированы ВСЕ классы из пакета java.util:

Пример

Пользовательские пакеты

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

Пример

Чтобы создать пакет, используйте ключевое слово package:

MyPackageClass.java

Сохраните файл как MyPackageClass.java и скомпилируйте его:

Затем скомпилируйте пакет:

Это заставляет компилятор создать пакет "mypack".

Ключевое слово -d указывает место назначения для сохранения файла класса. Вы можете использовать любое имя каталога, например c:/user (windows), или, если вы хотите сохранить пакет в том же каталоге, вы можете использовать знак точки ".", как в примере выше.

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

Когда мы компилировали пакет в приведенном выше примере, была создана новая папка с именем "mypack".

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

Можно предположить, что пакет — это папка или каталог, который используется для хранения подобных файлов.

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

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

Типы пакетов Java

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

  • Встроенный пакет: math, util, lang, i/o и т. д. являются примерами встроенных пакетов.
  • Определяемый пользователем пакет: пакет Java, созданный пользователем для классификации классов и интерфейса своего проекта, называется пользовательским пакетом.

Пакеты в Java

Как создать пакет

Создать пакет в java очень просто: просто включите команду package, за которой следует имя пакета, в качестве первого оператора в исходном файле java.

Приведенный выше оператор создаст пакет с именем mypack в каталоге проекта.

Java использует каталоги файловой системы для хранения пакетов. Например, файл .java для любого класса, который вы определяете как часть пакета mypack, должен храниться в каталоге с именем mypack.

Дополнительные сведения об упаковке:

  • Оператор пакета должен быть первым оператором в программе, даже перед оператором импорта.
  • Пакет всегда определяется как отдельная папка с тем же именем, что и у пакета.
  • Храните все классы в этой папке пакета.
  • Все классы пакета, к которым мы хотим получить доступ вне пакета, должны быть объявлены общедоступными.
  • Все классы в пакете должны иметь оператор пакета в первой строке.
  • Все классы пакета должны быть скомпилированы перед использованием.

Пример пакетов Java

Теперь давайте разберемся с созданием пакета на примере. Здесь мы создали пакет LeanJava, в котором хранится файл класса FirstProgram.

Как компилировать Java-программы внутри пакетов?

Это похоже на компиляцию обычной Java-программы. Если вы не используете какую-либо IDE, вам необходимо выполнить шаги, указанные ниже, чтобы успешно скомпилировать ваши пакеты:

Переключатель -d указывает место назначения для размещения сгенерированного файла класса. Вы можете использовать любое имя каталога, например d:/abc (в случае Windows) и т. д. Если вы хотите сохранить пакет в том же каталоге, вы можете использовать . (точка).

Как запустить пакетную программу Java?

Чтобы запустить скомпилированный класс, который мы скомпилировали с помощью вышеуказанной команды, нам также нужно указать имя пакета. Используйте приведенную ниже команду для запуска файла класса.

Добро пожаловать в пример пакета

После запуска программы мы получим сообщение «Добро пожаловать в пример пакета» на консоль. Вы можете сопоставить это с оператором печати, используемым в программе.

Как импортировать пакет Java

Чтобы импортировать пакет Java в класс, нам нужно использовать ключевое слово java import, которое используется для доступа к пакету и его классам в программе Java.

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

Существует 3 разных способа обращения к любому классу, присутствующему в другом пакете:

  1. без импорта пакета
  2. импортировать пакет с указанным классом
  3. импортировать пакет со всеми классами

Давайте разберемся с каждым на примере.

Доступ к пакету без ключевого слова import

Если вы используете полное имя для импорта какого-либо класса в вашу программу, то в вашей программе будет доступен только этот конкретный класс пакета, другие классы в том же пакете будут недоступны. Для этого подхода нет необходимости использовать оператор импорта. Но вам придется использовать полное имя каждый раз, когда вы обращаетесь к классу или интерфейсу. Это обычно используется, когда два пакета имеют классы с одинаковыми именами. Например: пакеты java.util и java.sql содержат класс Date .

Пример

В этом примере мы создаем класс A в пакете пакетов, а в другом классе B мы обращаемся к нему при создании объекта класса A.

Импорт определенного класса

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

Пример:

В этом примере мы создали класс Demo, хранящийся в пакете pack, а в другом классе Test мы получаем доступ к классу Demo, импортируя имя пакета с именем класса.

Импортировать все классы пакета

Если мы используем оператор packagename.*, то все классы и интерфейсы этого пакета будут доступны, но классы и интерфейсы внутри подпакетов будут недоступны для использования.

Ключевое слово import используется, чтобы сделать классы другого пакета доступными для текущего пакета.

Пример:

В этом примере мы создали класс First в пакете LearnJava, который обращается к нему в другом классе Second с помощью ключевого слова import.

На этой странице обсуждаются подробности чтения, записи, создания и открытия файлов. Существует широкий спектр методов файлового ввода-вывода на выбор. Чтобы лучше понять API, на следующей диаграмме методы файлового ввода-вывода упорядочены по сложности.

Способы файлового ввода-вывода расположены от менее сложных к более сложным

В крайнем левом углу диаграммы показаны служебные методы readAllBytes , readAllLines и методы записи, предназначенные для простых, распространенных случаев. Справа от них находятся методы, используемые для перебора потока или строк текста, такие как newBufferedReader, newBufferedWriter, затем newInputStream и newOutputStream. Эти методы совместимы с пакетом java.io. Справа от них находятся методы для работы с ByteChannels, SeekableByteChannels и ByteBuffers, такие как метод newByteChannel. Наконец, справа показаны методы, использующие FileChannel для расширенных приложений, которым требуется блокировка файлов или ввод-вывод с отображением памяти.

Примечание. Методы создания нового файла позволяют указать необязательный набор исходных атрибутов для файла. Например, в файловой системе, поддерживающей набор стандартов POSIX (такой как UNIX), вы можете указать владельца файла, владельца группы или права доступа к файлу во время создания файла.На странице «Управление метаданными» объясняются атрибуты файлов, а также способы доступа к ним и их установки.

Эта страница имеет следующие темы:

Параметр OpenOptions

Некоторые методы в этом разделе принимают необязательный параметр OpenOptions. Этот параметр является необязательным, и API сообщает вам, какое поведение по умолчанию для метода, если он не указан.

Поддерживаются следующие перечисления StandardOpenOptions:

  • ЗАПИСЬ — открывает файл для записи.
  • APPEND — добавляет новые данные в конец файла. Этот параметр используется с параметрами WRITE или CREATE.
  • TRUNCATE_EXISTING — усекает файл до нуля байтов. Этот параметр используется с параметром WRITE.
  • CREATE_NEW — создает новый файл и выдает исключение, если файл уже существует.
  • CREATE — открывает файл, если он существует, или создает новый файл, если он не существует.
  • DELETE_ON_CLOSE — удаляет файл при закрытии потока. Этот параметр полезен для временных файлов.
  • SPARSE — указывает на то, что вновь созданный файл будет разреженным. Этот расширенный параметр используется в некоторых файловых системах, таких как NTFS, где большие файлы с «пробелами» данных могут храниться более эффективно, так как эти пустые промежутки не занимают место на диске.
  • СИНХРОНИЗАЦИЯ – синхронизирует файл (содержимое и метаданные) с базовым устройством хранения.
  • DSYNC: синхронизирует содержимое файла с базовым устройством хранения.

Часто используемые методы для небольших файлов

Чтение всех байтов или строк из файла

Если у вас небольшой файл и вы хотите прочитать все его содержимое за один проход, вы можете использовать метод readAllBytes(Path) или readAllLines(Path, Charset). Эти методы берут на себя большую часть работы за вас, например открытие и закрытие потока, но не предназначены для обработки больших файлов. В следующем коде показано, как использовать метод readAllBytes:

Запись всех байтов или строк в файл

Для записи байтов или строк в файл можно использовать один из методов записи.

В следующем фрагменте кода показано, как использовать метод записи.

Буферизованные методы ввода/вывода для текстовых файлов

Пакет java.nio.file поддерживает канальный ввод-вывод, который перемещает данные в буферы, минуя некоторые уровни, которые могут стать узким местом для потокового ввода-вывода.

Чтение файла с использованием буферизованного потокового ввода-вывода

Метод newBufferedReader(Path, Charset) открывает файл для чтения, возвращая BufferedReader, который можно использовать для эффективного чтения текста из файла.

В следующем фрагменте кода показано, как использовать метод newBufferedReader для чтения из файла. Файл закодирован в "US-ASCII".

Запись файла с использованием буферизованного потокового ввода-вывода

Вы можете использовать метод newBufferedWriter(Path, Charset, OpenOption. ) для записи в файл с помощью BufferedWriter .

В следующем фрагменте кода показано, как с помощью этого метода создать файл, закодированный в "US-ASCII":

Методы для небуферизованных потоков и совместимость с API java.io

Чтение файла с помощью потокового ввода-вывода

Чтобы открыть файл для чтения, можно использовать метод newInputStream(Path, OpenOption. ). Этот метод возвращает небуферизованный входной поток для чтения байтов из файла.

Создание и запись файла с помощью потокового ввода-вывода

Вы можете создать файл, добавить в файл или записать в файл с помощью метода newOutputStream(Path, OpenOption. ). Этот метод открывает или создает файл для записи байтов и возвращает небуферизованный выходной поток.

Метод принимает необязательный параметр OpenOption. Если параметры открытия не указаны и файл не существует, создается новый файл. Если файл существует, он усекается. Этот параметр эквивалентен вызову метода с параметрами CREATE и TRUNCATE_EXISTING.

В следующем примере открывается файл журнала. Если файл не существует, он создается. Если файл существует, он открывается для добавления.

Методы для каналов и байтовых буферов

Чтение и запись файлов с помощью канала ввода/вывода

В то время как поток ввода-вывода считывает символ за раз, канальный ввод-вывод считывает буфер за раз. Интерфейс ByteChannel обеспечивает базовые функции чтения и записи. SeekableByteChannel — это ByteChannel, который может поддерживать позицию в канале и изменять эту позицию. SeekableByteChannel также поддерживает усечение файла, связанного с каналом, и запрос размера файла.

Возможность перемещаться в разные точки файла, а затем читать или записывать в это место, делает возможным произвольный доступ к файлу. Дополнительную информацию см. в разделе Файлы с произвольным доступом.

Существует два метода чтения и записи ввода-вывода канала.

Примечание. Методы newByteChannel возвращают экземпляр SeekableByteChannel .С файловой системой по умолчанию вы можете преобразовать этот байтовый канал с возможностью поиска в FileChannel, предоставляя доступ к более продвинутым функциям, таким как отображение области файла непосредственно в памяти для более быстрого доступа, блокировка области файла, чтобы другие процессы не могли получить к ней доступ, или чтение и запись байтов из абсолютной позиции без изменения текущей позиции канала.

Оба метода newByteChannel позволяют указать список опций OpenOption. Поддерживаются те же параметры открытия, что и в методах newOutputStream, в дополнение к еще одному параметру: READ требуется, поскольку SeekableByteChannel поддерживает как чтение, так и запись.

Указание READ открывает канал для чтения. Указание WRITE или APPEND открывает канал для записи. Если ни один из этих параметров не указан, то канал открывается для чтения.

Следующий фрагмент кода считывает файл и выводит его на стандартный вывод:

В следующем примере, написанном для UNIX и других файловых систем POSIX, создается файл журнала с определенным набором прав доступа к файлам. Этот код создает файл журнала или добавляет его к файлу журнала, если он уже существует. Файл журнала создается с разрешениями на чтение/запись для владельца и разрешениями только на чтение для группы.

Способы создания обычных и временных файлов

Создание файлов

Вы можете создать пустой файл с начальным набором атрибутов, используя метод createFile(Path, FileAttribute ). Например, если во время создания вы хотите, чтобы файл имел определенный набор прав доступа к файлу, используйте для этого метод createFile. Если вы не укажете никаких атрибутов, файл будет создан с атрибутами по умолчанию. Если файл уже существует, createFile выдает исключение.

В рамках одной атомарной операции метод createFile проверяет существование файла и создает этот файл с указанными атрибутами, что делает процесс более защищенным от вредоносного кода.

Следующий фрагмент кода создает файл с атрибутами по умолчанию:

Права доступа к файлам POSIX содержат пример использования createFile(Path, FileAttribute ) для создания файла с предустановленными разрешениями.

Вы также можете создать новый файл с помощью методов newOutputStream, как описано в разделе Создание и запись файла с использованием потокового ввода-вывода. Если вы откроете новый выходной поток и сразу же его закроете, будет создан пустой файл.

Создание временных файлов

Вы можете создать временный файл, используя один из следующих методов createTempFile:

Первый метод позволяет коду указать каталог для временного файла, а второй метод создает новый файл в каталоге временных файлов по умолчанию. Оба метода позволяют указать суффикс для имени файла, а первый метод также позволяет указать префикс. В следующем фрагменте кода приведен пример второго метода:

Многие реализации платформы Java полагаются на иерархические файловые системы для управления исходными файлами и файлами классов, хотя Спецификация языка Java этого не требует. Стратегия следующая.

Поместите исходный код класса, интерфейса, перечисления или типа аннотации в текстовый файл, имя которого является простым именем типа и имеет расширение .java . Например:

Затем поместите исходный файл в каталог, имя которого отражает имя пакета, к которому принадлежит тип:

Полное имя члена пакета и путь к файлу параллельны, если предположить, что в качестве разделителя имен файлов Microsoft Windows используется обратная косая черта (для UNIX используйте прямую косую черту).

  • имя класса — graphics.Rectangle
  • путь к файлу — graphics\Rectangle.java

При компиляции исходного файла компилятор создает отдельный выходной файл для каждого определенного в нем типа. Базовое имя выходного файла — это имя типа, а его расширение — .class. Например, если исходный файл выглядит так

тогда скомпилированные файлы будут расположены по адресу:

Как и исходные файлы .java, скомпилированные файлы .class должны находиться в ряде каталогов, соответствующих имени пакета. Однако путь к файлам .class не обязательно должен совпадать с путем к исходным файлам .java. Вы можете упорядочить каталоги исходного кода и классов отдельно, например:

Сделав это, вы можете передать каталог классов другим программистам, не раскрывая свои источники. Вам также необходимо управлять исходными файлами и файлами классов таким образом, чтобы компилятор и виртуальная машина Java (JVM) могли найти все типы, которые использует ваша программа.

Полный путь к каталогу классов,

\classes , называется путь к классу и задается системной переменной CLASSPATH. И компилятор, и JVM создают путь к вашим файлам .class, добавляя имя пакета к пути к классу. Например, если

это ваш путь к классу, а имя пакета

затем компилятор и JVM ищут файлы .class в

Путь к классу может включать несколько путей, разделенных точкой с запятой (Windows) или двоеточием (UNIX). По умолчанию компилятор и JVM выполняют поиск в текущем каталоге и файле JAR, содержащем классы платформы Java, так что эти каталоги автоматически находятся в вашем пути к классам.

Установка системной переменной CLASSPATH

Чтобы отобразить текущую переменную CLASSPATH, используйте следующие команды в Windows и UNIX (оболочка Bourne):

Чтобы удалить текущее содержимое переменной CLASSPATH, используйте следующие команды:

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