Java неверный формат файла

Обновление файла манифеста jar — java.io.IOException: неверный формат манифеста

Мне нужно обновить манифест в моем файле jar, который я создаю (экспортировать) в Eclipse. Я попытался следовать это объяснение без успеха. Я не совсем уверен, что указать в командной строке. Веб-сайт Oracle не слишком ясен. Затем я нашел сообщение о SO, в котором говорится, чтобы извлечь файл manifest.mf из архива jar, обновить его и добавить его обратно в архив jar. Я тоже это пробовал и, похоже, работает, однако, во время выполнения, я получаю java.io.IOException: invalid manifest format . Каков правильный способ обновления manifest.mf для добавления новых атрибутов? Пример был бы наиболее полезным.

4 ответа

Ссылки, предложенные Петром, были частично полезны. Тем не менее, я смог решить это более или менее путем проб и ошибок. Документы Oracle, объясняющие, как это сделать, требуют большой работы. У них нет хорошего примера того, как действовать. В любом случае, для тех, кто сталкивается с теми же проблемами, вот что я сделал. Я создал текстовый файл (например, «Manifest.txt» ) с помощью Notepad, который содержит атрибуты манифеста, которые я хотел добавить/обновить. При создании этого файла я обязательно добавил новый символ строки в последнюю строку, нажав клавишу на клавиатуре. Затем я создал файл bat DOS для фактической модификации. Вот как это выглядело.

echo Updating manifest permissions. "C:\Program Files\Java\jdk1.7.0_25\bin\jar" -umf "c:\some folder\Manifest.txt" "C:\some folder\jartoupdate.jar" 

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

Как файл манифеста содержится в подкаталоге META-INF файла jar под именем MANIFEST.MF. При каждом создании файла команды jar для командной строки командой jar cvf Jarfilename FilesToadd Затем создается файл манифеста по умолчанию. Можно просмотреть этот файл и получить представление о действительном файле манифеста. Чтобы извлечь файл манифеста из jar-типа, выполните следующую команду в cmd jar xvf Jarfilename теперь в базовом каталоге появится подкаталог META-INF, где вы можете просмотреть файл манифеста по умолчанию. Иногда при обновлении файла манифеста мы получаем java.io.IOException: недопустимый формат манифеста. Эта ошибка возникает из-за следующих причин: 1. Возможно, вы не оставили пробел между именем и значением любого раздела в файле манифеста,
например Версия: 1.1, вместо этого напишите Версия: 1.1, что пространство между двоеточием и 1.1 действительно имеет большое значение. 2. Пока не укажем основной класс, вы могли бы добавить расширение .class в конце имени класса. Просто укажите основной класс, набрав Main-Class: Classname. 3. Возможно, вы не добавили новую строку в конце файла. Вам не нужно писать \n для указания новой строки, а просто оставить последнюю строку вашего файла манифеста пустой, которая будет служить цели 4. Ваш текстовый файл для манифеста должен использовать UTF-8, иначе вы можете столкнуться с некоторыми проблемами. Наконец, я предоставляю пример того, как должен выглядеть файл манифеста. Здесь пакет калькулятор, а основным классом является Calculator.java Манифест-версия: 2.1 Created-By: UselessCoder Имя пакета: калькулятор Имя класса: calculator.Calculator.java Main-Class: calculator.Calculator

Читайте также:  Php добавление данных csv

Изображение 456825

Чтобы обновить манифест в файле jar, вы нашли ответ в документах oracle. Вот еще одно место, чтобы увидеть ответ. Предполагая, что вы прочитали доступ к каталогу, где установлен JDK, и с ним была загружена документация (легко загрузить документацию, это для SE7 http://www.oracle.com/technetwork/java/javase/documentation/java-se-7-doc-download-435117.html):

  • перейдите в [install_directory]/docs. В нем есть файл index.html.
    → → , например. my для JDK 6 называется C:\my_TOOLS\Java_stuff\jdk_1.6.0_20\docs\index.html
  • Перетащите index.html на страницу браузера.
  • Эта страница показывает вам обзор документации JDK и содержит много ссылок на полезную информацию. В строке верхнего окна строки Java Language щелкните JAR. Он переводит вас на страницу, суммирующую документацию (со ссылками) jartool.
    В разделе» JAR Tools «этой страницы нажмите ссылку ссылки на страницу для вашей платформы (возможно, вам нужна» справочная страница инструмента JAR для Windows»).
  • В этой «справочной странице инструмента JAR» показана подробная документация для команды jar. Здесь вы увидите пример » jar umf Manifest.txt my_jar.jar«. (Solaris/Linux не использует «-» перед аргументами, такими как «umf».

Я использовал его (в Linux), чтобы объединить 2 пользовательских файла манифеста в Манифест по умолчанию и поместить его в мою банку. Я делаю это в двухэтапном процессе, но мне было бы интересно узнать одноэтапную команду для этого. (Использование двух m для команды jar заставляет второй манифест перезаписывать первый манифест — не сливаться.) (Помните, что каждый файл манифеста должен заканчиваться пустой строкой.)

Manifest.txt содержит «Имя:» и «Версия реализации:»
Manifest.my_app.txt содержит» Main-Class: «и» Class-Path: »
В объявлении по умолчанию содержится «Манифест-версия: «и» Создано: от:»

jar cmf my_app.jar Manifest.txt my_main.class my_utils.class jar umf Manifest.my_app.txt my_app.jar 

После этого my META-INF/MANIFEST.MF содержит все поля из всех 3 манифестаций. Я ожидал, что их присоединят друг к другу, но поля смешались. Может быть, кто-то может сказать, как их заказать или просто добавить. Это порядок, в котором они отображаются в моем текущем META-INF/MANIFEST.MF.

Manifest-Version: 1.0 Implementation-Title: my_app Implementation-Version: 1.2.1 Class-Path: . Name: My App Created-By: 1.6.0_20 (Oracle Corporation) Main-Class: My_App 

Я надеюсь, что некоторые из них вам полезны.

Читайте также:  Text effects in html css

Источник

Java неверный формат файла

import java.io.*; public class ReadFile < public static void main(String[] args) throws IOException < int res = 0; try < res = sammy(readFirstLine(new File("C:/Users/Katya/IdeaProjects/HelloWorld/src/ru/Ilyenko/s08/file"))); >catch (FileBadFormatException e) < e.printStackTrace(); System.out.println("Неверный формат файла"); >catch (FileNotFoundException e) < e.printStackTrace(); System.out.println("Файла не существует"); >System.out.println(res); //Преобразование числа в строку String str = Integer.toString(res); //Записываем строку в файл try < String result = writeToFirst(new File("C:/Users/Katya/IdeaProjects/HelloWorld/src/ru/Ilyenko/s08/result"), str); >catch (FileBadFormatException e) < e.printStackTrace(); System.out.println("Неверный формат файла"); >catch (FileNotFoundException e) < e.printStackTrace(); System.out.println("Файла не существует"); >> public static int sammy(String file) < // Удаляем все пробелы String file1 = file.replaceAll("\\s+", ""); // Преобразовываем строку в число int x = Integer.parseInt(file1); //Вычисляем сумму цифр в числе int i = 0; while (x != 0) < i = i + x % 10; x = x / 10; >return i; > static String readFirstLine(File file) throws IOException < FileInputStream stream = new FileInputStream(file); BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); String first = reader.readLine(); reader.close(); stream.close(); return first; >static String writeToFirst(File file, String value) throws IOException < FileWriter writer = new FileWriter(file, false); writer.write(value); writer.flush(); writer.close(); return value; >> import java.io.IOException; public class FileBadFormatException extends IOException < public FileBadFormatException(String a) < super(a); >>

Неверный формат файла и файла не существует я кое как создала, а теперь не понимаю как мне создать исключение типа недопустимый формат числа (если в числе будет буква), сумма превышает допустимых значения Long.MAX_VALUE. Это мне надо создать новый класс исключения куда на вход будет приходить например только тип int? или как то еще?

Источник

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

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

Читайте также:  Spring application java config

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

Это вопрос стиля как “технически”, неважно, какой тип исключения вы бросаете; это может быть java.awt.FontFormatException , javax.management.modelmbean.XMLParseException или даже просто стандартный java.lang.Throwable с любой дополнительной информацией, которую вы положили в нее.

Это, как утверждают другие, это, вероятно, лучший выбор: “сворачивать свои собственные”:

public class InvalidFormatting extends java.lang.Throwable < /** The underlying error of this instance */ public final static String Error = "An invalid format has been detected"; /** Create a new exception */ public InvalidFormatting() < super(InvalidFormatting.Error); >/** * Create a new exception with additional information * * @param additionalMsg The additional information to append */ public InvalidFormatting(String additionalMsg) < super(InvalidFormatting.Error + "\n" + additionalMsg); >> 

Тогда он может быть использован как таковой

throw new InvalidFormatting("here some extra info"); 

Не используйте IOException – файл был открыт и успешно прочитан; проблема заключается в ее содержании. Вы можете создать исключение IllegalArgumentException или создать свой собственный тип исключения.

Источник

java.lang.Exception: не указан файл сертификата или неверный формат файла

Я получаю ниже ошибку при развертывании через jboss 5.1.1:

2014-03-18 08:44:57,834 ERROR [org.apache.coyote.http11.Http11AprProtocol] Error initializing endpoint java.lang.Exception: No Certificate file specified or invalid file format at org.apache.tomcat.jni.SSLContext.setCertificate(Native Method) at org.apache.tomcat.util.net.AprEndpoint.init(AprEndpoint.java:660) at org.apache.coyote.http11.Http11AprProtocol.init(Http11AprProtocol.java:106) at org.apache.catalina.connector.Connector.initialize(Connector.java:1029) at org.apache.catalina.core.StandardService.initialize(StandardService.java:683) at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:821) at org.jboss.web.tomcat.service.deployers.TomcatService.startService(TomcatService.java:313) at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:376) at org.jboss.system.ServiceMBeanSupport.pojoStart(ServiceMBeanSupport.java:216) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:59) at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:150) at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66) at org.jboss.kernel.plugins.dependency.KernelControllerContextAction$JoinpointDispatchWrapper.execute(KernelControllerContextAction.java:243) at org.jboss.kernel.plugins.dependency.ExecutionWrapper.execute(ExecutionWrapper.java:47) at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchExecutionWrapper(KernelControllerContextAction.java:111) at org.jboss.kernel.plugins.dependency.KernelControllerContextAction.dispatchJoinPoint(KernelControllerContextAction.java:72) at org.jboss.kernel.plugins.dependency.LifecycleAction.installActionInternal(LifecycleAction.java:221) at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54) at org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42) at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62) at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71) at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51) at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348) at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1652) 

3 ответа

Я исправил эту проблему, например:

  1. Перейти в каталог установки Tomcat
  2. Найдите сервер.xml
  3. Изменить протокол с «HTTP/1.1» в «org.apache.coyote.http11.Http11NioProtocol» в тег.

Для любого, кто будет работать через этот поток в будущем, для JBoss 5.1.2 мне пришлось установить протокол на org.apache.coyote.http11.Http11Protocol, org.apache.coyote.http11.Http11NioProtocol не существует.

Источник

Оцените статью