2013-09-12 3 views
1

структуру проекта structure of projectя не могу читать данные из кувшина

Код:

public class WriterXlsx { 
    public WriterXlsx(String sfilename, List<RecordNameCode> records, List<Day> recordsDay, Integer fullTime) { 
     String path = "res/" + sfilename + ".xlsx"; 
     URL resURL = getClass().getClassLoader().getResource(path); 
     try (InputStream inputStream = resURL.openStream()) 
     { 
      int lastUsedColumn = createListHead().size(); 
      XSSFWorkbook workBook = new XSSFWorkbook(inputStream); 
      XSSFSheet sheet = workBook.getSheetAt(0); 

      drawRecordHead(createListHead(),sheet); 
      writeContent(2, records,sheet); 
      createPlanForDay(recordsDay,fullTime,lastUsedColumn,sheet,workBook); 

      try(FileOutputStream out = new FileOutputStream("C:\\Users\\student3\\"+sfilename+".xlsx");) { 
      workBook.write(out); 
      out.close();   } 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

Программа будет писать SfileName и чтение из файла в res\ IDE (IntelliJ IDEA), но это не делает работать независимо. Я не могу запустить программу .jar archieve. (Может быть, рес каталог не найден) ..

МАНИФЕСТ:

Manifest-Version: 1.0 
Main-Class: workhere.Start 

Класс Начало:

public class Start { 
public static void main(String[] args) { 
     System.out.println("It's working"); 
     new Start().start(countDays); 
     System.out.println("Work is finished"); 
    } 
........ 
+0

шар, если у вас есть какие-либо ошибки, исключение? –

+0

Что вы подразумеваете под «не работает»: это исключение? Какого рода, из какой линии? – Joni

+0

работает отлично в IDE, но не работает .jar 0 исключение и ошибки – Eldar

ответ

0

Я думаю, потому что вы используете .getResource() Попробуйте

getClass().getClassLoader().getResourceAsStream(path); 

вместо

getClass().getClassLoader().getResource(path); 

После того, как файл упакован в банку, он перестает быть автономным файлом в файловой системе, который имеет исключительный путь к файловой системе. Существует только один файл, банку и файл - это его содержимое.

+0

ничего не случилось – Eldar

+0

И как вы изменили свой код? – rocketboy

+0

Я понятия не имею, какой класс я должен использовать, поэтому я попросил вас о помощи – Eldar

0

вы можете сделать это в Дифференц способов проверить, например:

this.getClass().getResource(sfilename) 

GetResources найти ресурс относительно пакета.

this.getClass().getResource("/"+sfilename) 

getResources будет рассматривать его как абсолютный путь и просто вызвать загрузчик классов.

this.getClass().getClassLoader().getResource(sfilename) 

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

+0

lotta NPE ...... – Eldar

+0

null pointer ??? поэтому, когда закрывайся ..., чтобы узнать точку и удар ее! – ZaoTaoBao

Смежные вопросы