如何解决Java I / O帮助 Jar无法打开文件:URI不是分层的
我已经搜索了3天,不停地寻找我能找到的每条帖子。我的程序在IntelliJ上运行,但不能在可执行文件上运行。您的帮助将不胜感激:)
更重要的是,在哪里可以找到深入的用户友好教程?是否有我可以付费的课程或书籍?在Udemy上,java类完全无法提及I / O,例如classpath和URI。 TutorialsPoint简要介绍了I / O,但没有深入探讨。我错过了什么?有没有更简单的方法来完成所有这一切?
对我不起作用的类似帖子: Java Jar file: use resource errors: URI is not hierarchical https://stackoverflow.com/a/27149287/155167
我正在尝试加载Excel文件。我正在使用Maven。 Apache POI表示需要一个文件。因此 InputStream不起作用。 http://poi.apache.org/components/spreadsheet/quick-guide.html#FileInputStream
当我使用java -jar jarFile时,它给了我错误:
C:\Users\1010\Documents\Personal\MonsterManager>java -jar monsterManagerVer3.jar
Exception in thread "main" java.lang.IllegalArgumentException: URI is not hierarchical
at java.base/java.io.File.<init>(File.java:421)
at LoadExcel.<init>(LoadExcel.java:62)
at monsterRunner.<init>(monsterRunner.java:13)
at monsterRunner.main(monsterRunner.java:24)
这是代码
public LoadExcel() throws IOException,URISyntaxException,InvalidFormatException {
mNames = null;
URL ins = this.getClass().getResource("/excel_List.xlsx");
if (ins == null)
throw new FileNotFoundException("The XLSX file didn't exist on the classpath");
ins.toString().replace(" ","%20"); //<-Runs without this part
File file = new File(ins.toURI()); //this is line 62
// File f = new File(getClass().getResource("/MyResource").toExternalForm());
//String path = this.getClass().getClassLoader().getResource("/excel_List.xlsx").toExternalForm();
//File file = new File(path);
OPCPackage pkg = OPCPackage.open(file);
XSSFWorkbook wb = new XSSFWorkbook(pkg);
//FileInputStream fis=new FileInputStream(new File(excelFile));
// XSSFWorkbook wb = new XSSFWorkbook(fis);
XSSFSheet sheet = wb.getSheetAt(0);
loadExcel(sheet);
cacheNames();
// fis.close();
wb.close();
}
如果有帮助,请访问excel文件的路径: src \ main \ resources \ excel_List.xlsx
更新: 所以我从资源文件夹中取出了excel文件 \ nameOfMyProgram \ excel_List.xlsx 现在我得到这个错误。 我尝试了使用classLoader,Class和Thread的多个版本来解决Different ways of loading a file as an InputStream中的此错误 但我仍然无法编译它。
解决方法
如果必须使用File对象,请不要将xls-file放入资源目录。
Maven将资源目录中的所有文件放入jar。
Java无法基于jar文件中的文件创建File对象。
将xls文件放在文件系统中的某个位置,然后根据其URL创建File对象。
由于您的xls文件不是资源,因此请勿使用getResource
。
其URL是其完整文件名(带有路径)。
下面的代码与jar可执行文件一起使用
String path = new File("excel_List.xlsx").getAbsoluteFile().toString();
File file = new File(path);
if(!file.exists()){
JOptionPane.showMessageDialog(null,"File not found!");
System.exit(0);
}
OPCPackage pkg = OPCPackage.open(file);
XSSFWorkbook wb = new XSSFWorkbook(pkg);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。