Я получаю эти исключения в своем коде, в то время как я пишу некоторые данные в книге excel, используя банки poi:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/UnsupportedFileFormatException
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at WorkBookDemo.main(WorkBookDemo.java:27)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.UnsupportedFileFormatException
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 13 more
Я добавил следующие банки:
log4j-1.2.17
import java.io.File;
import java.io.FileOutputStream;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class WorkBookDemo {
public static void main(String[] args)
{
//Blank workbook
XSSFWorkbook workbook = new XSSFWorkbook();
//Create a blank sheet
XSSFSheet sheet = workbook.createSheet("Employee Data");
//This data needs to be written (Object[])
Map<String, Object[]> data = new TreeMap<String, Object[]>();
data.put("1", new Object[] {"ID", "NAME", "LASTNAME"});
data.put("2", new Object[] {1, "Amit", "Shukla"});
data.put("3", new Object[] {2, "Lokesh", "Gupta"});
data.put("4", new Object[] {3, "John", "Adwards"});
data.put("5", new Object[] {4, "Brian", "Schultz"});
//Iterate over data and write to sheet
Set<String> keyset = data.keySet();
int rownum = 0;
for (String key : keyset)
{
Row row = sheet.createRow(rownum++);
Object [] objArr = data.get(key);
int cellnum = 0;
for (Object obj : objArr)
{
Cell cell = row.createCell(cellnum++);
if(obj instanceof String)
cell.setCellValue((String)obj);
else if(obj instanceof Integer)
cell.setCellValue((Integer)obj);
}
}
try
{
//Write the workbook in file system
FileOutputStream out = new FileOutputStream(new File("exps.xlsx"));
workbook.write(out);
out.close();
System.out.println("exps.xlsx written successfully on disk.");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
FileOutputStream out = new FileOutputStream(new File("exps.xlsx"));
Выходной поток файла - это выходной поток для записи данных в файл или в файл-дескриптор. Будет ли файл доступен или может быть создан, зависит от базовой платформы. Некоторые платформы, в частности, позволяют открывать файл для записи только одним FileOutputStream (или другим объектом для записи файлов) одновременно. В таких ситуациях конструкторы этого класса не сработают, если файл уже открыт.
Поскольку вы явно создаете объект File
и передаете его в конструктор FileOutputStream
. Предполагается, что файл "exps.xlsx"
уже создан. [Справка.]
Incase, это не так, вы просто передаете имя файла в конструкторе FileOutputStream
.
FileOutputStream out = new FileOutputStream("exps.xlsx");
Это автоматически создаст файл, если он уже не создан.
Более того, я тестировал ваш данный код и использовал следующую зависимость от Maven
и это сработало.
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.10-FINAL</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.10</version>
</dependency>
Если вы не используете проект maven
, вы можете явно добавить вышеупомянутые jars
из вышеупомянутых версий.
приведенный ниже список банок, необходимых для библиотеки apachePOI, должен быть такой же, как показано ниже:
org.apache.poi.3.11
org.apache.poi-ooxml.3.11
org.apache.poi-ooxml-schemas.3.11
если вышеупомянутые банки одной и той же библиотеки имеют разные версии, то u получит исключение как "java.lang.NoClassDefFoundError: org/apache/poi/UnsupportedFileFormatException"
У вас отсутствуют файлы jar. Я запустил ваш код в своей рабочей области, и я добавил необходимые банки для создания пути. Он работал последовательно.
org/apache/poi/UnsupportedFileFormatException is under poi-x.xx-xxx-xx.jar
Ошибок в коде нет. Добавьте банки для создания пути.
вы также можете проверить наличие дубликатов банок пои, предположим, вам нужен poi-ooxml-3.9. баночка. но в вашей папке lib есть и poi-ooxml-3.11.jar, poi-ooxml-3.9.jar, затем удаляет poi-ooxml-3.11.jar, тогда он должен работать.