файл .xls не обнаружен java

#java #xls

Вопрос:

Когда я пытаюсь загрузить файл xls, он не работает, даже если находится в той же папке. Я также попробовал это с абсолютными путями. (Все это произошло из-за пропавших банок, вот список со всеми из них. Чтобы решить проблему относительных путей, url.getResource() снизу работает нормально.) Мой список Jar(Изображение)

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

Здесь находится файл(рисунок)

Это ошибка с относительным путем:

 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
 

Комментарии:

1. Пожалуйста, попробуйте вот так, файл FileInputStream = новый файловый поток(новый файл(«*file_path\MP.xls»));

2. С относительным путем появляется та же ошибка, что и с абсолютным путем, который она дает, другая. но все равно не работает

3. Не могли бы вы, пожалуйста, добавить оба способа, которые вы пробовали, и связанные с ними найденные ошибки?

4. Абсолютный путь был чем? Вы можете попробовать это, выполнив следующие действия в cmd.exe: dir C:UsersfoobarMP.xlx

5. Дайте расширение файла .xlsx вместо .xls, это будет работать

Ответ №1:

Входной поток fileinput с абсолютным путем работает. Просто чтение с помощью HSSFWorkbook — пропускает библиотеку.

Относительный путь является изменчивым параметром. Если файл является источником только для чтения, объедините его с приложением и не используйте файл (файл файловой системы), а используйте ресурс, «файл» в пути к классу, возможно, в комплекте с приложением jar.

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

Для HSSFWorkbook библиотека с org.apache.commons.math3 классами не найдена,
требуется косвенная библиотека.

Поскольку эти зависимости библиотек являются дополнительной работой, уже выполненной другими и включающей перемещение согласованных версий всех библиотек для совместной работы, следует лучше использовать, например, maven, инфраструктуру сборки. Проекты Maven (или gradle) поддерживаются большинством IDE и имеют немного иную структуру каталогов.

Ответ №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);
    }
}
 

Комментарии:

1. Не находит файл. Исключение в потоке «основной» java.io.FileNotFoundException:

2. Вы уверены, что ваше имя файла MP.xls и он находится в том же каталоге, что и ваш класс?

3. Да, я также пробовал разные расположения файлов, такие как рабочий стол и т. Д,