我目前正在与Apachi合作,因为我需要从XLSX文件读取数据,以后将其转换为CSV。这是我用来创建XSSFWorkbook的代码,它每次都会导致异常。据我所知,XMLBeans是其中的一部分。它已被弃用,但是在这种情况下,它是POI的依赖项。
public static void appendCSV(File inputFile, String outputFile, String tag)
{
System.out.println(inputFile.getAbsolutePath());
InputStream inp = null;
try {
inp = new FileInputStream(inputFile);
XSSFWorkbook wb = new XSSFWorkbook(inp);
Run Code Online (Sandbox Code Playgroud)
我的异常被抛出在上面代码块的最后一行。
Exception in thread "main" org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
at org.apache.poi.POIXMLFactory.createDocumentPart(POIXMLFactory.java:65)
at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:601)
at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:174)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:279)
at BigBangarang.appendCSV(BigBangarang.java:68)
at BigBangarang.main(BigBangarang.java:268)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:56)
at org.apache.poi.POIXMLFactory.createDocumentPart(POIXMLFactory.java:62)
... 5 more
Caused by: java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setLoadEntityBytesLimit(I)Lorg/apache/xmlbeans/XmlOptions;
at org.apache.poi.POIXMLTypeLoader.<clinit>(POIXMLTypeLoader.java:50)
at org.apache.poi.xssf.model.SharedStringsTable.readFrom(SharedStringsTable.java:127)
at org.apache.poi.xssf.model.SharedStringsTable.<init>(SharedStringsTable.java:108)
... 11 more
Run Code Online (Sandbox Code Playgroud)
有人遇到过这种情况吗?我拥有最新的XMLBeans版本,几乎感觉到我可能需要找到一个旧版本,因为它说缺少一种方法。我不确定是否有替代/便捷的方法来读取XLSX,或者在处理任何数据之前将其简单地转换为CSV。
我在这里遇到了一个奇怪的问题.不确定原因是什么.我正在用Java编写语音演示,我正在编写一些简单的程序.出于某种原因,在使用石头剪刀程序时,并不总是想要返回我的随机数.我的起始代码在下面,我想说每3次中有一次,它实际上会打印出一个数字.
Random rand = new Random();
int randomNum = rand.nextInt(3) + 1;
System.out.println(randomNum);
Run Code Online (Sandbox Code Playgroud)
就像我说的,非常简单的代码,但我不知道为什么它只是有时打印数字...
编辑:整个项目
主要导入java.util.Scanner;
public class Speech_Main {
public static void main(String[] args) {
boolean running = true;
Scanner in = new Scanner(System.in);
while(running){
if(in.next().equalsIgnoreCase("exit")){
running = false;
}
if(in.next().equalsIgnoreCase("Hello_World")){
Hello_World.start();
}
if(in.next().equalsIgnoreCase("rps")){
Rock_Paper_Scissors.start();
}
}
in.close();
return;
}
}
Run Code Online (Sandbox Code Playgroud)
RPS
import java.util.Random;
public class Rock_Paper_Scissors {
public static void start(){
System.out.println(random());
}
private static int random(){
Random rand = new Random();
int randomNum = rand.nextInt() + 1; …Run Code Online (Sandbox Code Playgroud)