Java I/O 求助。 Jar 无法打开文件:URI 不是分层的
Java I/O help. Jar Cannot Open File: URI is Not Hierarchal
我已经搜索了 3 天了,一直不停地查看我能找到的每一个 post。我的程序在 IntelliJ 上 运行s,但不能在可执行文件上 运行。您的帮助将不胜感激:)
更重要的是,我在哪里可以找到深入的用户友好教程?有我可以支付的课程或书籍吗?在Udemy上, java 类 完全没有提及 I/O 诸如类路径和URI。 TutorialsPoint 简要介绍了 I/O,但并不深入。我错过了什么?有没有更简单的方法来完成这一切??
类似的 post 对我不起作用:
Java Jar file: use resource errors: URI is not hierarchical
我正在尝试加载 excel 文件。我正在使用 Maven。 Apache POI 说它需要一个文件。所以 InputStream 不工作。 http://poi.apache.org/components/spreadsheet/quick-guide.html#FileInputStream
当我 java -jar jarFile 时,它给我错误:
C:\Users10\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 的错误
但我仍然无法编译它。
Error and my code
如果必须使用文件对象,请不要将 xls-file 放入资源目录。
Maven 将资源目录中的所有文件放入 jar。
Java 无法基于 jar-file 中的文件创建 File 对象。
将您的 xls-file 放在文件系统中的某个位置,并根据其 URL.
创建 File 对象
由于您的 xls-file 不是资源,请勿使用 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);
我已经搜索了 3 天了,一直不停地查看我能找到的每一个 post。我的程序在 IntelliJ 上 运行s,但不能在可执行文件上 运行。您的帮助将不胜感激:)
更重要的是,我在哪里可以找到深入的用户友好教程?有我可以支付的课程或书籍吗?在Udemy上, java 类 完全没有提及 I/O 诸如类路径和URI。 TutorialsPoint 简要介绍了 I/O,但并不深入。我错过了什么?有没有更简单的方法来完成这一切??
类似的 post 对我不起作用: Java Jar file: use resource errors: URI is not hierarchical
我正在尝试加载 excel 文件。我正在使用 Maven。 Apache POI 说它需要一个文件。所以 InputStream 不工作。 http://poi.apache.org/components/spreadsheet/quick-guide.html#FileInputStream
当我 java -jar jarFile 时,它给我错误:
C:\Users10\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 的错误 但我仍然无法编译它。
Error and my code
如果必须使用文件对象,请不要将 xls-file 放入资源目录。
Maven 将资源目录中的所有文件放入 jar。
Java 无法基于 jar-file 中的文件创建 File 对象。
将您的 xls-file 放在文件系统中的某个位置,并根据其 URL.
由于您的 xls-file 不是资源,请勿使用 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);