Подтвердить что ты не робот

Импортировать файлы .java в правильный пакет

У меня есть куча исходных файлов *.java, которые содержат классы в разных пакетах. Я пытаюсь импортировать все эти файлы в проекты Eclipse, но Eclipse всегда помещает их в пакет по умолчанию.

Как я могу сказать Eclipse разместить каждый из файлов в соответствующем подкаталоге пакета, поэтому мне не нужно создавать все различные пакеты вручную?

Я попробовал импорт из функции файловой системы, а также копировал файлы в проект, все из которых помещали файлы в пакет default, а не те, которые явно указаны в инструкции package поверх каждого файл.

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

Обновление:. В соответствии с запросом в комментариях, вот несколько примеров файлов:

Test1.java

package some.random.pkg;

public class Test1 {
}

Test2.java

package some.other.pkg;

public class Test2 {
}

Test3.java

package yet.another.pkg;

public class Test3 {
}

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

Обновление 2:. Чтобы уточнить масштаб, предположим, что на самом деле примерно на 100 таких файлов (разумеется, с большим количеством контента;-)) еженедельно, поэтому я "Ищу автоматическое решение".

4b9b3361

Ответ 1

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

Затем вы можете скопировать/вставить вновь созданные папки/файлы в Eclipse.

Исходный код и runnable.jar: https://github.com/felipeweber/OrganizeJavaSources

Чтобы выполнить его, вы скопируете/вставьте runnable.jar в папку, в которой находятся все ваши .java файлы, и запустите ее с помощью java -jar OrganizeJavaSources.jar из командной строки или командной строки. Он должен работать как в Linux, так и в Windows (и, возможно, MacOS тоже).

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

Удачи.

Ответ 2

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

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

  • Прочитайте файл .java
  • Проверьте строку package, пока терминатор ; в этом .java файле
  • Переместите этот файл в соответствии с именем пакета, заменив . разделителями каталогов в качестве адреса, в котором вы будете перемещать файл.
  • Создайте папку, если папка перемещения файла не существует
  • Повторяйте это до тех пор, пока все файлы не будут перемещены.

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

Ответ 3

В соответствии с этой ссылкой вы можете получить то, что вы действительно хотите сделать.

Файл → Новый проект/Динамический веб-проект

затем

Файл → Новая папка, нажмите "Дополнительно" и выберите "Ссылка на папку в файловой системе".

После этого щелкните правой кнопкой мыши по папке и выберите BuildPath → Использовать в качестве исходной папки. Вот оно..

ИЛИ

вы можете создать новую папку, скопируйте самую большую папку с *.java файлами и вставьте ее. Затем щелкните по нему правой кнопкой мыши, выберите BuildPath → Использовать в качестве исходной папки...

Я надеюсь, что это сработает для вас!

Ответ 4

Вам нужно взломать. Я надеюсь, что вы используете linux, иначе будет сложнее:)

1- Создайте небольшую программу java, которая читает и исполняет файл .sh  Вот фрагмент, который показывает, как вы можете читать с script

 ProcessBuilder pb = new ProcessBuilder("myshell.sh", "myArg1", "myArg2");
 Process p = pb.start();

2- Создайте .sh script и убедитесь, что java правильно его выбирает (просто поместите некоторое эхо-сообщение в script и убедитесь, что оно напечатано)

3. Целью этого взлома является попытка использовать grep, который читает все файлы с расширением .java и передает его в программу mv, которая будет поместите их в правильную папку.

4- Как вы узнаете, как установить то, в какой папке (пакете) будет возможно, потому что вы можете прочитать каждый из файлов с помощью cat и таким образом определить, куда они должны идти. Команда mkdir должна помочь вам правильно создать папки, прежде чем перемещать файлы.

5- Если вы не уверены в этом решении, позвольте мне сказать вам, что это очень сложная задача, требующая от вас хорошо изучить и распознать все шаблоны. Я уверен, что это возможно, и вы можете сделать это, используя условную логику трубопроводов и некоторую приятную расслабляющую музыку для озвучивания, чтобы помочь вам сосредоточиться.

Здесь я заканчиваю вам BASH guide, чтобы освежить ваш ум

Удачи и счастливого нового 2013 года

Ответ 5

Если файл находится в неправильном пакете, Eclipse предложит вам исправить ошибку, перемещая файл. С помощью функции быстрого исправления (выберите в представлении "Ошибка", нажмите CTRL + 1), вы можете легко перемещать их. Попробуйте выбрать их все сразу, возможно, ваша версия Eclipse более новая, чем моя, и вы можете исправить их все за один раз. В противном случае он все же быстрее, чем вручную создает пакет.

Ответ 6

Так вот что я сделал...

  • Новый → Проект Java (опции: нажмите "использовать папку проекта как root для источников и файлов классов" )

  • Далее

  • Выберите "Связать дополнительный источник" (в разделе "Подробности" )

  • Просмотрите папку "Связанные папки" и выберите верхнюю папку (содержащую все ваши пакеты и т.д.).

  • Готово

Если у вас уже есть проект, то...

  • Щелкните правой кнопкой мыши проект в проводнике пакетов и выберите "Свойства"

  • Выберите "Java Build Path"

  • Выберите "Источник ссылок" (на вкладке "Источник" )

  • Просмотрите папку "Связанные папки" и выберите верхнюю папку (содержащую все ваши пакеты и т.д.).

  • Готово

Если ваши файлы не указаны в каталогах, соответствующих указанным в них пакетам, затем ЗАПИСЬ РЕЗЕРВУ ВАШИХ ФАЙЛОВ (т.е. скопируйте их все в другой каталог) и попробуйте следующее:

Скомпилируйте следующую программу с javac MakePackDirs.java и запустите с помощью java MakePackDirs, а структура каталогов и файлов будет создана в соответствии с объявлениями пакетов, а затем используйте процедуру, описанную выше.

import java.util.regex.*;
import java.util.*;
import java.io.*;

public class MakePackDirs {

    public static void main(String[] args) throws Exception {

        String pkg;

        for (File f : new File(".").listFiles(
            new FilenameFilter () {
               public boolean accept (File dir, String name) {
                   return name.endsWith(".java");
               } })) {

            if (f.isDirectory()) continue;

            System.out.println("Processing " + f.getName());
            Scanner s = new Scanner(f);
            try {
                Pattern p = Pattern.compile("^[ ]*package +[^;]*", 
                            Pattern.MULTILINE);
                if ((pkg = s.findWithinHorizon(p,0))==null) continue;
            }
            finally {
                s.close();
            }

            System.out.println("Found " + pkg);

            pkg = pkg.split(" ")[1];
            pkg = pkg.replaceAll("\\.","/").trim();

            System.out.println("Creating " + pkg);

            File dir = new File(pkg);
            boolean created = dir.mkdirs();

            if (!created && !dir.exists()) 
                throw new Exception("Can't create package directory");

            // Moving file
            File dest = new File(dir, f.getName());
            boolean renamed = f.renameTo(dest);

            if (!renamed) 
                throw new Exception("Can't move file to " + dest.getPath());

            System.out.println(f.getName() + " moved to " + dir.getPath());
        }
    }
}