Как я могу включить файл из каталога выше в Java? - PullRequest
1 голос
/ 09 февраля 2012

Я не уверен, как импортировать файл из каталога выше.То есть, у меня есть такая установка

directory: MyProject
    Main.java
    directory: Other
        Other.java

По сути, Main.java находится в «MyProject», а Other.java находится в папке внутри корневой папки проекта.Я легко могу сделать

import Other.*;

, чтобы эти файлы были доступны в Main, но как мне сделать Main.java видимым для Other.java?

import ../Main.java

Очевидно, чтоне работает, но это общий функционал, который я ищу.Какие-либо предложения?Я бы предпочел не использовать абсолютные пути.Спасибо!

Редактировать: я имел в виду импорт не включать.Сожалею.Слишком много использовал C ++.

Ответы [ 5 ]

1 голос
/ 09 февраля 2012

Java не включает файлы. Однако вы можете напрямую использовать классы, используя simple name, используя операторы import.

По сути, вам нужен файл для каждого (верхнего уровня) класса, который вы определяете. Это позволяет IDE переименовывать блоки компиляции и выполнять другие рефакторинги. Кроме того, он позволяет легко добавлять код в нужное место.

Java использует пакеты для создания пространств имен . Сами пакеты являются совершенно отдельными пространствами имен. Хотя пространство имен выглядит как древовидная структура, в Java каждый пакет фактически не связан с каким-либо другим пакетом. Следовательно, вы не можете использовать его как структуру папок, использование .. не допускается. Это может измениться, как только появятся «супер пакеты».

Оператор Java import выглядит очень похоже на #include, но изменение имени является преднамеренным: вместо того, чтобы захватить файл, чтобы сделать определения в этом файле известными, это просто утверждение, чтобы упростить обращение к нему. классы и интерфейсы. Это не имеет никакого другого эффекта, кроме как иметь более короткое имя для класса (или, для import static, констант и других static членов).

Большую часть времени классы верхнего уровня представлены с использованием структуры папок, которая отражает имя пакета. Это облегчает IDE и разработчикам поиск файла, представляющего класс. Это также позволяет легко установить контроль версий. Это, однако, не является частью самой спецификации Java; расположение исходного кода и классов Java не определено. Ранее IBM IDE, например, фактически сохранял исходный код и классы Java в базе данных; они не использовали файлы вообще. Более новые IDE, такие как Eclipse, могут использовать разные исходные папки, например, один для файлов модульного теста и один для самой библиотеки.

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

import java.util.Vector;
import java.util.*;

Большинство IDE создают эти операторы импорта для вас, возможно, после того, как вы выбрали правильный класс для импорта (в случае, если в разных пакетах есть классы с одинаковыми именами).


Дополнительную информацию можно найти в Спецификации языка Java (версия Java 7) .

В вашем случае вы определили класс Main в корневом каталоге или пакет по умолчанию , который настоятельно не рекомендуется. Вы можете напрямую ссылаться на Main без указания import. Класс Other находится в одноименном пакете Other (использование заглавных букв в именах пакетов также настоятельно не рекомендуется). Вы можете обратиться к нему с помощью import Other.Other.

1 голос
/ 09 февраля 2012

включают ???

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

Вы должны определить пакет для своего основного класса и затем импортировать его в класс Other.

1 голос
/ 09 февраля 2012

Main.java находится в пакете по умолчанию, это невозможно импортировать из других (именованных) пакетов

положить его в пакет и импортировать как обычно

directory: MyProject
    directory: base
        Main.java
    directory: other
        Other.java

(также имена пакетов обычно в нижнем регистре)

0 голосов
/ 09 февраля 2012

Я думаю import Main; должно просто работать.

Вы должны прочитать понятия java package и classpath . Пожалуйста, посмотрите документацию здесь . Опции, которые будут работать для вас: sourcepath и classpath .

0 голосов
/ 09 февраля 2012

если у вас есть файл вне вашего проекта, это означает, что этот файл:

  • не будет скомпилирован проектом
  • не попадет в jar
  • не может использоваться во время выполнения

, поэтому вам не следует его включать.

Либо переместите его в проект, либо включите зависимый проект, который содержит этот файл.

Java не похож на C ++.Вы включаете по имени пакета.Таким образом, если файл верхнего уровня находится в проекте AAA в папке src / aaa, то вы должны включить этот проект в качестве зависимого jar и ссылаться на файл как import aaa.Main

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...