#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. Да, я также пробовал разные расположения файлов, такие как рабочий стол и т. Д,