首页 > 解决方案 > 写入 excel 文件后抛出 File not found 异常

问题描述

因此,我获取了一个 Doubles 列表,并将它们写入现有的 Excel 表。据我所知,打开文件、创建新单元格和添加数据没有问题。但是,一旦循环完成设置新的单元格值,我就会抛出一个找不到文件的异常。

我已经盯着这个并尝试了几天不同的东西,只是看不出有什么问题。

列表输入是 29 个正负数。

这是完整的功能。有问题的循环将在完整代码块下方再次添加。

private static void ocrAddToExcel(List list, List Ion){

        String templatePath = "/Users/pluebbert/NetBeansProjects/PDFtoExcel/OCR_Excel_Template.xls";
        System.out.println("Template: " + templatePath);

        File input = new File(templatePath);

         List<Double> doubleList = new ArrayList<>();


         for(int i = 0; i <= list.size()-1; i++){

            Double conc = Double.parseDouble(list.get(i).toString());
            System.out.println(conc);
            doubleList.add(conc);

         }

         try{
             if(input.exists()){
                 System.out.println("Found input stream file");
                 System.out.println(input.getAbsolutePath());
             }

             FileInputStream template = new FileInputStream(input);
             System.out.println("FIS Created");

             HSSFWorkbook book = new HSSFWorkbook(template);
             System.out.println("Grabbed book");
             HSSFSheet sheet = book.getSheetAt(0);

             int firstNum = sheet.getFirstRowNum(); //0
             int lastNum = sheet.getLastRowNum(); //33


             System.out.println("First num: " + firstNum + " lastNum:" + lastNum);

                  //THIS LOOP BELOW//
             for(int i = 0; i <= list.size(); i++){

                  Double conc = doubleList.get(i);

                  System.out.println("Conc: " + conc + " I:::: " + i + "n::: " + n);

                  Cell cell = sheet.getRow(i).createCell(i, n);
                  cell.setCellValue(conc);

                  System.out.println(cell.toString());

                     //Loop completes and prints every cell correctly
             }



             //Print below never gets executed.

             System.out.println("Done adding data to cells for pdf number: " + n);

             System.out.println("Iterator done");

             String destinationPath = isEmpty ? "Test" + "_" + "Test" + "_Ions.xls" : outputName + ".xls";
             // if empty, use default name, else user specified name
             File outputFile = new File(destinationPath);
             System.out.println("Created output file at: " + outputFile.getAbsolutePath());

             FileOutputStream fileOut = new FileOutputStream(outputFile); //saves file

             book.write(fileOut);
             fileOut.flush();
             template.close();
             fileOut.close();


            ++n;

            System.out.println("*************Template filled*************");
            System.out.println("Now renaming file for you");

            fileOut.close();
            open(destinationPath);
         }


         catch(Exception e){
             System.out.println("File not found");
         }
    }

因此,在循环完成并将所有正确的单元格值打印到控制台后,我得到了找不到文件的异常。

for(int i = 0; i <= list.size(); i++){

                  Double conc = doubleList.get(i);

                  System.out.println("Conc: " + conc + " I:::: " + i + "n::: " + n);

                  Cell cell = sheet.getRow(i).createCell(i, n);
                  cell.setCellValue(conc);

                  System.out.println(cell.toString());

                     //Loop completes and prints every cell correctly
             }

标签: javaapache-poi

解决方案


考虑一下:

if(input.exists()){
   System.out.println("Found input stream file");
   System.out.println(input.getAbsolutePath());
}
FileInputStream template = new FileInputStream(input);

最后一行抛出 FileNotFoundException。相反,您应该创建新工作簿:

HSSFWorkbook book=new HSSFWorkbook();
HSSFSheet sheet=book.createSheet("FirstSheet"); 
HSSFRow row=sheet.createRow(0);
cell.setCellValue(conc);

等等。


推荐阅读