Как переименовать java в jar?
Есть test.java файл с классами. Нужно этот файл переименовать в test.jar формат чтобы при двойном клике файл открывался. Я попробовал через IntelegiIde c build artifacts. Но там не сработало. Попробовал через командную строку с
java -jar test.jar. Там выдало ошибку : Error: Could not find or load main class jdk Caused by: java.lang.ClassNotFoundException: jdk. Есть ли еще способы или где я делаю ошибку?
- Вопрос задан более года назад
- 134 просмотра
Комментировать
Решения вопроса 0
Ответы на вопрос 3
Михаил @Akela_wolf
Extreme Programmer
«Как переименовать .txt в .exe чтобы он двойным кликом открывался?»
- Компилируете java-файлы в классы (.class) используя javac (не java, а именно javac — компилятор)
- Добавляете к этому набору классов файл манифеста
- Опционально добавляете туда зависимости (если нужен fat jar)
- Собираете все это в zip-архив
- Меняете расширение на jar
В более-менее сложных проектах это все автоматизируется системой сборки, такой как gradle или maven.
Ответ написан более года назад
Нравится 1 2 комментария

Maly @maly222 Автор вопроса
Да я скомпилировал в .class. Но как добавить к классам манифест?
Михаил @Akela_wolf
Вам, чтобы файл запускался в первую очередь нужен атрибут Main-Class

Орхан Гасанлы @azerphoenix Куратор тега Java
Java Software Engineer
Добрый день.
Думаю, что вам необходимо начать с изучения азов.
jar — это java архив.
java — это расширение файла до компиляции
class — это расширение файла после компиляции (где хранится байт-код)
Java — переименовать или переместить файл
Сначала мы рассмотрим использование классов Files и Path из NIO, затем класса Java File , Google Guava и, наконец, библиотеки Apache Commons IO.
Эта статья является частью серии « Java — Back to Basic » здесь, на ForEach.
2. Настройка
В примерах мы будем использовать следующую настройку, которая состоит из двух констант для имени исходного и целевого файлов и шага очистки, позволяющего запускать тесты несколько раз:
private final String FILE_TO_MOVE = "src/test/resources/originalFileToMove.txt"; private final String TARGET_FILE = "src/test/resources/targetFileToMove.txt"; @BeforeEach public void createFileToMove() throws IOException File fileToMove = new File(FILE_TO_MOVE); fileToMove.createNewFile(); > @AfterEach public void cleanUpFiles() File targetFile = new File(TARGET_FILE); targetFile.delete(); >
3. Использование классов путей и файлов NIO
Начнем с использования метода Files.move() из пакета Java NIO:
@Test public void givenUsingNio_whenMovingFile_thenCorrect() throws IOException Path fileToMovePath = Paths.get(FILE_TO_MOVE); Path targetPath = Paths.get(TARGET_FILE); Files.move(fileToMovePath, targetPath); >
В JDK7 был значительно обновлен пакет NIO и добавлен класс Path . Это предоставляет методы для удобного управления артефактами файловой системы.
Обратите внимание, что и файл, и целевой каталог должны существовать.
4. Использование класса файлов
Давайте теперь посмотрим, как мы можем сделать то же самое, используя метод File.renameTo() :
@Test public void givenUsingFileClass_whenMovingFile_thenCorrect() throws IOException File fileToMove = new File(FILE_TO_MOVE); boolean isMoved = fileToMove.renameTo(new File(TARGET_FILE)); if (!isMoved) throw new FileSystemException(TARGET_FILE); > >
В этом примере файл, который нужно переместить, существует, как и целевой каталог.
Обратите внимание, что renameTo() генерирует только два типа исключений:
- SecurityException — если менеджер безопасности запрещает запись в источник или в место назначения.
- NullPointerException — в случае, если цель параметра равна нулю
Если цель не существует в файловой системе — исключение не будет выдано — и вам придется проверить возвращенный флаг успеха метода.
5. Использование гуавы
Далее — давайте взглянем на решение Guava, которое предоставляет удобный метод Files.move() :
@Test public void givenUsingGuava_whenMovingFile_thenCorrect() throws IOException File fileToMove = new File(FILE_TO_MOVE); File targetFile = new File(TARGET_FILE); com.google.common.io.Files.move(fileToMove, targetFile); >
Опять же, в этом примере файл, который нужно переместить, и целевой каталог должны существовать.
6. С вводом-выводом Commons
Наконец, давайте взглянем на решение с Apache Commons IO — возможно, самое простое:
@Test public void givenUsingApache_whenMovingFile_thenCorrect() throws IOException FileUtils.moveFile(FileUtils.getFile(FILE_TO_MOVE), FileUtils.getFile(TARGET_FILE)); >
Эта единственная строка, конечно же, позволит перемещать или переименовывать, в зависимости от того, совпадает ли целевой каталог или нет.
В качестве альтернативы — вот решение для конкретного перемещения, которое также позволяет нам автоматически создавать каталог назначения, если он еще не существует:
@Test public void givenUsingApache_whenMovingFileApproach2_thenCorrect() throws IOException FileUtils.moveFileToDirectory( FileUtils.getFile("src/test/resources/fileToMove.txt"), FileUtils.getFile("src/main/resources/"), true); >
6. Заключение
В этой статье мы рассмотрели различные решения для перемещения файла в Java. В этих фрагментах кода мы сосредоточились на переименовании, но перемещение — это, конечно, то же самое, только целевой каталог должен быть другим.
Код примеров доступен на GitHub .
Java не удается переименовать файл
У меня есть массив байт, я создаю файл и записываю массив байт в этот файл, потом закрываю запись. Как запись закрыта я хочу переименовать расширение файла. Мой код:
FileOutputStream newFile = new FileOutputStream(rb_Path[0]+"\\"+file_id+".d"); //было .dat //Записать массив полученных байт в новый файл .dat newFile.write(byteNewFile); newFile.flush(); //Закрываем создание нового файла newFile.close(); File file_d = new File(rb_Path[0]+"\\"+file_id+".d"); //File file_dat = new File(rb_Path[0]+"\\"+file_id+".dat"); //file.d переименовать в file.dat boolean isRenamed = file_d.renameTo(new java.io.File(rb_Path[0] + "\\" + file_id + ".dat")); System.out.println(isRenamed);
Но получаю false. И как итог не переименовался файл (1234.d на 1234.dat). Также пробовал так:
File file_d = new File(rb_Path[0]+"\\"+file_id+".d"); //Создан File file_dat = new File(rb_Path[0]+"\\"+file_id+".dat"); //Не создан, служит объектом для rename //file.d переименовать в file.dat boolean isRenamed = file_d.renameTo(file_dat); System.out.println(isRenamed);
- rb_Path[0] — не имеет некорректных символов.
- file_id — это int, например 1234
Поэтому даже не знаю как быть.
Подскажите пожалуйста как можно решить такую задачу. Может стоит и вовсе делать все по другому? У кого есть решение? Заранее спасибо большое.
Переименование элементов модели
Помимо простого переименования элемента, когда вы просто изменяете его имя в панели Свойства, AnyLogic поддерживает механизм переименования элемента, производящий также соответствующее переименование всех ссылок на этот элемент в данной модели. Такое переименование не влияет на поведение модели, оставляя ее семантику прежней.
Это может пригодиться, например, в следующем случае: пусть вам нужно переименовать переменную, задействованную в системно динамической диаграмме потоков и накопителей (т.е. эта переменная используется в формулах других системно динамических переменных). Тогда если вы просто переименуете эту переменную, то соответствующие формулы станут некорректны, а если вы воспользуетесь механизмом переименования с заменой всех ссылок на элемент, то имя этой переменной будет изменено и во всех соответствующих формулах, и семантика диаграммы потоков и накопителей останется прежней.
Чтобы переименовать элемент модели (а также все ссылки на его имя)

- Щелкните правой кнопкой мыши по элементу в панели Проекты, выберите Переименовать из контекстного меню и в открывшемся диалоговом окне введите новое имя элемента в поле Новое имя. Если вы хотите предварительно просмотреть результаты планируемого переименования, оставьте выбранным флажок Предварительный просмотр изменений. Щелкните по кнопке Переименовать.
- Если AnyLogic настроен на показ предварительных результатов изменений, то появится диалоговое окно Предварительный просмотр результатов операции.
- Оставьте выделенными в списке Будут сделаны следующие изменения только те ссылки на элемент, которые вы хотите переименовать.
- Когда вы закончите, щелкните по кнопке OK.
Вы можете настроить показ предварительных результатов изменений с помощью флажка Всегда предварительно просматривать результаты в диалоговом окне Предварительный просмотр результатов операции или на странице Разработка настроек программы.
Быстрое переименование из панели Свойства
Можно переименовать элемент и все ссылки на него в модели прямо из свойства Имя элемента.
Чтобы переименовать элемент из панели Свойства
-
Введите новое имя в поле Имя в панели Свойства.