Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Erreur] NoClassFound /The supplied file was empty

Apache POI

Sujet résolu
    30 juillet 2020 à 13:51:32

    Bonjour à tous,

    Je travaille actuellement sur NetBeans IDE 8.2 (version que je dois utiliser pour les cours) et je bosse actuellement sur un projet perso pour m'aider à progresser. Il se trouve que j'ai un soucis avec une de mes classes. Elle a pour but dans un premier temps de créer un fichier Excel que je remplirai par la suite avec les objets des autres classes.

    Pour la tester j'ai intégrer un main pour voir si elle fonctionne mais la classe en question me retourne 2 erreurs à la compilation.

    La première lors du premier Run : 

    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:102)
    	at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:124)
    	at org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkbook.java:1373)
    	at ExcelDataUpdater.exportDataToExcel(ExcelDataUpdater.java:64)
    	at ExcelDataUpdater.main(ExcelDataUpdater.java:73)
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.math3.util.ArithmeticUtils
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    	... 9 more
    ..\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
    BUILD FAILED (total time: 0 seconds)

    Le fichier Excel est bien créer mais si je vais l'ouvrir dans le dossier j'ai le message suivant :

    " Le format du fichier "TestResultData.xls" ne correspondent pas. Le fichier peux présenter un risque ou avoir été endommagé. Ne l'ouvrez pas, à moins que la source soit fiable. Voulez vous quand même l'ouvrir "

    Lors du second Run j'ai : 

    Exception in thread "main" org.apache.poi.EmptyFileException: The supplied file was empty (zero bytes long)
    	at org.apache.poi.util.IOUtils.peekFirstNBytes(IOUtils.java:111)
    	at org.apache.poi.poifs.filesystem.FileMagic.valueOf(FileMagic.java:206)
    	at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:248)
    	at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:221)
    	at ExcelDataUpdater.exportDataToExcel(ExcelDataUpdater.java:33)
    	at ExcelDataUpdater.main(ExcelDataUpdater.java:73)
    ..\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
    BUILD FAILED (total time: 0 seconds)

    Je ne vois vraiment pas comment régler ça parce que je ne vois pas d'où peut venir le problème. J'ai bien ajouté Apache POI à la librairie de mon projet et dans le doute je l'ai même intégré dans le PATH.

    Voici le code de ma classe, voyez si vous voyez quelque chose qui m'échappe :

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import org.apache.poi.EncryptedDocumentException;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.ss.usermodel.WorkbookFactory;
    
    public class ExcelDataUpdater {
    
        public static void dataVersExcel(String fileName, String tabName, String[][] data)
             throws FileNotFoundException, IOException, EncryptedDocumentException, Exception {
            FileInputStream inputStream = null;
            Workbook wb;
            Sheet sheet = null;
    
            if (!fileName.endsWith(".xls"))
                throw new IllegalArgumentException("Format incorrect. Essayer avec un type .xls");
    
            File newFile = new File(fileName);
    
            if (!newFile.exists()) 
                wb = new HSSFWorkbook();
            
            else {
                inputStream = new FileInputStream(newFile);
                wb = WorkbookFactory.create(inputStream);
            }
    
            boolean isSheetFound = false;
            for (int i = 0; i < wb.getNumberOfSheets(); i++) 
                if (wb.getSheetName(i).equals(tabName)) {
                    sheet = wb.getSheet(tabName);
                    isSheetFound = true;
                }
            
            if (!isSheetFound) 
                sheet = wb.createSheet(tabName);
            
            Row[] row = new Row[data.length];
            Cell[][] cell = new Cell[row.length][];
    
            for (int i = 0; i < row.length; i++) {
                row[i] = sheet.createRow(i);
                cell[i] = new Cell[data[i].length];
    
                for (int j = 0; j < cell[i].length; j++) {
                    cell[i][j] = row[i].createCell(j);
                    cell[i][j].setCellValue(data[i][j]);
                }
            }
    
            if (inputStream != null)
                inputStream.close();
    
            FileOutputStream outputStream = new FileOutputStream(newFile);
    
            wb.write(outputStream);
            outputStream.close();
            wb.close();
            System.out.println("Pas d'erreur à signaler");
        }
    
        public static void main(String[] args)
                throws EncryptedDocumentException, FileNotFoundException, IOException, Exception {
            String data1[][] = { { "A", "B", "C", "D" } };
            ExcelDataUpdater.dataVersExcel("TestResultData.xls", "Results1", data1);
    
            String data2[][] = { { "X", "Y", "Z", "W" } };
            ExcelDataUpdater.dataVersExcel("TestResultData.xls", "Results2", data2);
        }
    }

    Bon courage et Merci d'avance. 

    • Partager sur Facebook
    • Partager sur Twitter
      1 août 2020 à 10:50:55

      org.apache.poi.EmptyFileException: The supplied file was empty (zero bytes long)

      Le fichier que tu fournis est vide

      • Partager sur Facebook
      • Partager sur Twitter
        3 août 2020 à 17:49:26

        Bonjour, désolé du retour tardif, c'est normal je pense que le fichier soit vide puisque qu'il est censé être créé et rempli par le programme 

        Le problème c'est que j'ai apparemment un problème avec ces lignes

        ligne 33 : wb = WorkbookFactory.create(inputStream);
        ligne 64 :  wb.write(outputStream);

        J'ai essayer de changer la ligne 50 en :

        int rowCount = sheet.getLastRowNum();
        row[i] = sheet.createRow(rowCount+1);

        Mais ça me signaler un possible null pointer 


        • Partager sur Facebook
        • Partager sur Twitter
          3 août 2020 à 17:57:55

          un fichier xls n'est jamais vide, il contient au moins un header, et donc ne peut jamais faire 0 bytes.
          • Partager sur Facebook
          • Partager sur Twitter
            4 août 2020 à 0:55:49

            Essaye de mettre cette commande :
            import org.apache.commons.math3.util.ArithmeticUtils ;

            Si tu as une erreur, c'est qu'il te manque au moins cette librairie.

            Ça devrait te régler ton problème de premier run. Je pense que ça devrait même régler le second mais tiens moi au courant.

            -
            Edité par OceaneMartin1 4 août 2020 à 0:56:26

            • Partager sur Facebook
            • Partager sur Twitter
              4 août 2020 à 13:49:50

              Bonjour, effectivement il me manqué la ligne de commande que tu m'as indiqué et la librairie associé et maintenant ça fonction tout bon 

              Merci à tous pour vos réponses

              • Partager sur Facebook
              • Partager sur Twitter

              [Erreur] NoClassFound /The supplied file was empty

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown