【问题标题】:.xls file not detected java.xls 文件未检测到 java
【发布时间】:2021-11-24 19:54:43
【问题描述】:

当我尝试加载 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

【问题讨论】:

  • 请这样试试,FileInputStream file = new FileInputStream(new File("*file_path\\MP.xls"));
  • 使用相对路径会弹出相同的错误,使用绝对路径会出现另一个错误。但仍然无法正常工作
  • 能否请您添加您尝试过的两种方法以及发现的相关错误?
  • 绝对路径是什么?您可以通过在 cmd.exe 中执行以下操作来尝试:dir C:\Users\foo\bar\MP.xlx
  • 提供文件扩展名 .xlsx 而不是 .xls 它将起作用

标签: java xls


【解决方案1】:

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

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

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

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

由于这些库依赖项是额外的工作,已经由其他人完成,并且涉及移动所有库的一致版本以协同工作,因此应该更好地使用例如 ma​​ven,一种构建基础架构。大多数 IDE 都支持 Maven(或 gradle)项目,但目录结构略有不同。

【讨论】:

    【解决方案2】:

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

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

    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);
        }
    }
    

    【讨论】:

    • 找不到文件。线程“主”java.io.FileNotFoundException 中的异常:
    • 您确定您的文件名是 MP.xls 并且它与您的班级位于同一目录吗?
    • 是的,我也尝试了不同的文件位置,例如桌面等,
    猜你喜欢
    • 2021-07-09
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    相关资源
    最近更新 更多