Очистка незакрытого ZipFile для архива в файле Excel - PullRequest
2 голосов
/ 23 сентября 2019

Итак, я работал над простой структурой автоматизации, которая использует Excel в качестве пула данных.Однако, обновляя версию моего pom.xlm, я столкнулся с этой ошибкой в ​​своей консоли.

Cleaning up unclosed ZipFile for archive C:<workspace repo>\ExcelFile.xlsx

Я понятия не имею, что пошло не так.Эта ошибка не останавливает выполнение, и мои тесты проходят гладко.Как я могу решить эту проблему?Я не могу найти ничего, связанного с этим.

Вот зависимости:

    <dependencies>
        <dependency>
            <groupId>org.apache.xmlbeans</groupId>
            <artifactId>xmlbeans</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>xml-apis</groupId>
            <artifactId>xml-apis</artifactId>
            <version>1.4.01</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-contrib</artifactId>
            <version>3.7-beta3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.9</version>
        </dependency>
        <dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.jexcelapi</groupId>
            <artifactId>jxl</artifactId>
            <version>2.6.3</version>
        </dependency>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>com.relevantcodes</groupId>
            <artifactId>extentreports</artifactId>
            <version>2.41.2</version>
        </dependency>
        <dependency>
            <groupId>com.aventstack</groupId>
            <artifactId>extentreports</artifactId>
            <version>3.1.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.specs</groupId>
            <artifactId>geronimo-stax-api_1.0_spec</artifactId>
            <version>1.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.0.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
            <version>4.0-beta</version>
        </dependency>

        <dependency>
            <groupId>velocity</groupId>
            <artifactId>velocity-dep</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.53.0</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-api</artifactId>
            <version>2.53.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>18.0</version>
        </dependency>
        <dependency>
            <groupId>org.uncommons</groupId>
            <artifactId>reportng</artifactId>
            <version>1.1.4</version>
        </dependency>

        <dependency>
            <groupId>ru.yandex.qatools.ashot</groupId>
            <artifactId>ashot</artifactId>
            <version>1.5.4</version>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>4.3.1</version>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-jvm-deps</artifactId>
            <version>1.0.6</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.aventstack</groupId>
            <artifactId>extentreports-testng-adapter</artifactId>
            <version>1.0.3</version>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-testng</artifactId>
            <version>4.3.1</version>
            <scope>compile</scope>
            <exclusions>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

Вот метод, с которым я имею дело с excel:

public static String get(String sheetName, String scenario, String columnName) throws IOException {

        org.apache.poi.ss.usermodel.Workbook tempWB;
        int k=0;
        try {

            if(workbookPath.contains(".xlsx") || workbookPath.contains(".xlsm")){
                tempWB = new XSSFWorkbook(workbookPath);
            } else{             
                InputStream inp = new FileInputStream(workbookPath);
                tempWB = (org.apache.poi.ss.usermodel.Workbook) new HSSFWorkbook(new POIFSFileSystem(inp));                 
            }

            org.apache.poi.ss.usermodel.Sheet sheet = tempWB.getSheet(sheetName);

            int rows = sheet.getPhysicalNumberOfRows();

            for(int i=0;i<rows;i++){
                //Getting the number of defined cells in the row
                int cols = sheet.getRow(0).getPhysicalNumberOfCells();

                for (int j = 0; j < cols; j++) { 
                    if(sheet.getRow(i).getCell(j,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).toString().replace(".0", "").equalsIgnoreCase(columnName)){ 
                        k=j;
                    }

                    map.put(sheet.getRow(i).getCell(0,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).toString().replace(".0", ""),
                            sheet.getRow(i).getCell(k,Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).toString().replace(".0", ""));
                }
            } 
        } catch (Exception e){
            e.printStackTrace(); 
        } 

        return map.get(scenario);
    }

1 Ответ

1 голос
/ 26 сентября 2019

Я мог заметить, что вы не закрыли свой InputStream.Если вы не закроете поток, файл будет заблокирован до тех пор, пока не будет закрыт входной поток или не завершится работа JVM.

Так что, вероятно, в вашем контексте проще всего выполнить автоматическое закрытие с помощью команды try-with-ресурсы построить как,

try (FileInputStream inp = new FileInputStream(workbookPath)) {
    tempWB = (org.apache.poi.ss.usermodel.Workbook) new HSSFWorkbook(new POIFSFileSystem(inp)); 
} catch (Exception e) {
    Log.error("Class Utils | Method setExcelFile | Exception desc : "+ e.getMessage());
}

Надеюсь, это поможет вам.:)

...