Размер XMLConfiguration равен 0

File file = new File( "justskiphere" );
  if ( !file.exists() )
  {
     file =
           new File( Thread.currentThread().getContextClassLoader()
                 .getResource( "general_cat_column_order.xml" ).getFile() );
     LOG.info( "Found in the thread" );
  }
  XMLConfiguration config = null;
  try
  {
     config = new XMLConfiguration( file );
     LOG.info( config.getBasePath() );
     LOG.info( config.getFileName() );
     LOG.info( config.getRootElementName() );
     LOG.info( "" + config.getRootNode().getChildren().size() );

  }
  catch ( final ConfigurationException e )
  {
     TableColumnHelper.LOG.warn( "Could not find the xml file.", e );
  }

Здравствуйте, когда я пытаюсь читать с jar, Он видит, что файл там, но не получает его содержимое. Итак, результат LOG наверху есть:


12:58:33,665 [main] [INFO] TableColumnHelper - Found in the thread    
12:58:33,701 [main] [INFO] TableColumnHelper - /home/mert/Desktop/inspector-1.0-3/file:/home/mert/Desktop/inspector-1.0-3/groundstation.jar!        
12:58:33,701 [main] [INFO] TableColumnHelper - general_cat_column_order.xml        
12:58:33,701 [main] [INFO] TableColumnHelper - configuration        
12:58:33,701 [main] [INFO] TableColumnHelper - 0        
12:58:33,702 [main] [INFO] TableColumnHelper - Items in set: 0

Я не понимаю почему. jar is: общий порядок столбцов cat - это файл в jar и в нем есть содержание.

Какова причина?

Заранее спасибо.

2 ответа

Решение

Чтение файлов изнутри jars всегда в чем-то, о чем я должен думать;-)

Я всегда заканчиваю тем, что использую

getClass().getClassLoader().getResourceAsStream(...)

Часть "..AsStream" важна, так как объект файла не может заглянуть внутрь фляги. Я не уверен какой XMLConfiguration вы используете, но он, скорее всего, имеет конструктор InputStream.

Вы также можете посмотреть, как прочитать файл из файла JAR

В Java класс File представляет файл в файловой системе ОС. То, что находится внутри jar, отсутствует в файловой системе ОС. Они не могут быть доступны через файл.

Используйте getClass(). GetResourceAsStream() для чтения ваших ресурсов, которые находятся в jar / classpath. Если ваша библиотека не поддерживает загрузку содержимого из InputStream, обновите до версии, которая поддерживает.

Другие вопросы по тегам