首页 > 解决方案 > 从 xlsx 文件中获取数据时出现未找到文件异常

问题描述

我的 excel 文件中有 3 张工作表。我正在尝试使用 TestNG 的 @DataProvider 注释获取数据。在 getTestData() 方法中,我传递了工作表的名称。通过FileInputStream,读取文件的路径。即使我正在打印文件路径,它也会正确显示。构建路径打印为 - C:\Users\Gaurav Pratap Singh\eclipse-workspace\SampleTestFrameworkGPS\src\main\java\com\crm\qa\testData\FreeCRMTestData.xlsx。唯一的问题可以是目录名称中的空格。但是我还有一个文件,即 config.properties,它完全是从同一目录中提取的。

package com.crm.qa.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import com.crm.qa.base.TestBase;

public class TestUtil extends TestBase {



    public static String TESTDATA_SHEET_PATH = System.getProperty("user.dir")
    + "\\src\\main\\java\\com\\crm\\qa\\testData\\FreeCRMTestData.xlsx";
    
    public static Workbook book;
    public static Sheet sheet;

    public static Object[][] getTestData(String sheetName){
        FileInputStream fis = null;

        try {
            fis = new FileInputStream(new File(TESTDATA_SHEET_PATH));
            // File Path printing perfectly
            System.out.println("Sheet path " + TESTDATA_SHEET_PATH);
        } catch (FileNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        System.out.println("Sheet path " + TESTDATA_SHEET_PATH);

        try {
            book = WorkbookFactory.create(fis);
        } catch (EncryptedDocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        sheet = book.getSheet(sheetName);

        Object[][] data = new Object[sheet.getLastRowNum()][sheet.getRow(0).getLastCellNum()];

        for (int i = 0; i < sheet.getLastRowNum(); i++) {
            for (int k = 0; k < sheet.getRow(0).getLastCellNum(); k++) {
                data[i][k] = sheet.getRow(i + 1).getCell(k).toString();
            }
        }
        return data;

    }

}

标签: selenium-webdriverautomationapache-poi

解决方案


这是因为路径,Gaurav Pratap Singh文件夹中有空格。我已经更改了没有任何空格的驱动器并且它有效。我能够从同一目录访问 config.properties 文件,这很奇怪。


推荐阅读