2015-03-24 1 views
0

классов My MainClass.java имеет основной метод, который содержит следующий код, чтобы прочитать файл ExcelВыполнение файла .jar, чтобы загрузить файл в

String xlsxFilename = args[0]; 
try (InputStream fis = MainClass.class.getClassLoader().getResourceAsStream(xlsxFilename); 
    Workbook workbook = WorkbookFactory.create(fis);) { 
    ... 

Этот класс содержится в файле баночки и помещается в папке с именем Lib и я выполнения это, используя сценарий оболочки

run.sh

#!/bin/sh 
CP=lib/*: 
java -cp "$CP" in.test.MainClass $1 

Теперь я запустить команду на выполнение файла ш

sh run.sh Sample.xlsx 

Но это бросает исключение,

Exception in thread "main" java.lang.NullPointerException 
at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:79) 

Я предполагаю, что исключение происходит потому, что getResourceAsStream не загружается файл Excel, а объект диез является недействительным. Является ли текущий каталог невидимым для getResourceAsStream()? Как я могу прочитать файл xls внутри текущего каталога в моем MainClass.java?

+2

Я думаю, что если вы хотите читать как ресурс, файл excel должен быть помещен в файл jar где-нибудь с квалифицированным пакетом. – Yazan

+0

Является ли файл Excel в том же каталоге, из которого вы запускаете программу? Или в банке? Или в другом месте? – Gagravarr

+0

Файл Excel находится в том же каталоге, в котором запускается скрипт. – Rohit

ответ

1

Я думаю, что проблема в этой строке кода:

InputStream fis = MainClass.class.getClassLoader().getResourceAsStream(xlsxFilename) 

Файл xlsxFilename будет найти в загрузчик классов, если и только если ваш XLS находится в пути к классам, то есть в папке, указанной в -classpath вариант для JVM или внутри вашего jar. В первом случае командная строка должна стала что-то вроде этого:

java -classpath "your.jar:/path/to/xls/folder" in.test.MainClass $1 

Очевидно /path/to/xls/folder это папка, в которой вы должны поместить файл XLS.

В последнем случае файл XLS должен находиться в корневой папке из .class файлов.

Я предлагаю вам загрузить файл XLS с использованием абсолютного пути к файлу.

+0

Является ли путь, из которого sh-файл выполняется частью пути к классу. Я могу запустить то же самое в среде Windows, используя командный файл. '@ECHO OFF' ' set CLASSPATH =% CLASSPATH%; lib/*; ' ' java in.test.MainClass% 1' – Rohit

+0

Я отредактировал свой ответ. Проверьте это :) –

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

  • Нет связанных вопросов^_^