未检测到 .xls 文件 java

.xls file not detected java

当我尝试加载 xls 文件时,它不起作用,即使它位于同一文件夹中。我也用绝对路径试过。 (这一切都是因为缺少罐子而发生的,这里是所有罐子的列表。为了解决相对路径的问题,下面的 url.getResource() 工作正常。) My Jar List(Image)

public class Main {
    
        public static void main(String[] args) throws FileNotFoundException, IOException {
            FileInputStream f = new FileInputStream("MP.xls");
            HSSFWorkbook l = new HSSFWorkbook(f);
        }
        
    }
 public class Main {
    
        public static void main(String[] args) throws FileNotFoundException, IOException {
            FileInputStream f = new FileInputStream("C:\Users\alumno.Alumno-PC\Documents\NetBeansProjects\pruebas xlsx\src\pruebasxlsx\MP.xls");
            HSSFWorkbook l = new HSSFWorkbook(f);
        }
        
    }

This is where the file is located(picture)

这是相对路径的错误:

Exception in thread "main" java.io.FileNotFoundException: MP.xls (El sistema no puede encontrar el archivo especificado)
at java.base/java.io.FileInputStream.open0(Native Method)
at java.base/java.io.FileInputStream.open(FileInputStream.java:216)
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:111)
at pruebasxlsx.Main.main(Main.java:22)

这是绝对路径的错误

   Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/math3/util/ArithmeticUtils
    at org.apache.poi.poifs.property.RootProperty.setSize(RootProperty.java:59)
    at org.apache.poi.poifs.property.DirectoryProperty.<init>(DirectoryProperty.java:52)
    at org.apache.poi.poifs.property.RootProperty.<init>(RootProperty.java:31)
    at org.apache.poi.poifs.property.PropertyTable.<init>(PropertyTable.java:58)
    at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:99)
    at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:272)
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:399)
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:381)
    at pruebasxlsx.Main.main(Main.java:24)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.math3.util.ArithmeticUtils
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    ... 9 more

文件输入流获取以文件系统中的路径名命名的文件——这意味着一个绝对路径,作为参数,而不是相对路径。

如果您想从 class 的位置加载文件,请使用:

URL url = class.getResource("file.txt");

然后使用以下命令获取它的绝对路径:

url.getPath();

所以,下面的解决方案应该可行(它可以完善,但你会得到一个想法):

public class Main {
   static URL url = Main.class.getResource("MP.xls");

   public static void main(String[] args) throws FileNotFoundException, IOException {
       FileInputStream f = new FileInputStream(url.getPath());
       HSSFWorkbook l = new HSSFWorkbook(f);
    }
}

具有绝对路径的 FileInputStream 有效。只是用 HSSFWorkbook 阅读 - 错过了一个图书馆。

相对路径是一个易变的选项。如果文件是只读源,将其与应用程序捆绑在一起,并且不要使用 File(文件系统文件),而是使用资源,class 路径上的“文件”,可能捆绑在一个应用程序 jar.

   InputStream f = Main.class.getResourceAsStream("/pruebasxslx/MP.xls");
   HSSFWorkbook l = new HSSFWorkbook(f);

对于 HSSFWorkbook,未找到具有 org.apache.commons.math3 classes 的库, 一个间接需要的库。

由于这些库依赖项是额外的工作,已经由其他人完成,并且涉及移动所有库的连贯版本以协同工作,因此最好使用例如 maven,一个构建基础设施。大多数 IDE 都支持 Maven(或 gradle)项目,并且目录结构略有不同。