Java 打印输出会导致使用POI从xlsx文件加载内容的映射

Java 打印输出会导致使用POI从xlsx文件加载内容的映射,java,apache-poi,xlsx,Java,Apache Poi,Xlsx,因此,我需要从excel文件中打印出产品id和图像url,因为我需要使用检索到的内容修改另一个文件,但是由于某些原因,映射为空,但是如果我直接打印出值,它会正确显示它们 import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import

因此,我需要从excel文件中打印出产品id和图像url,因为我需要使用检索到的内容修改另一个文件,但是由于某些原因,映射为空,但是如果我直接打印出值,它会正确显示它们


import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;

public class Main {

    static final Map<String, String> PRODUCT_CODES_BY_IMAGES = new HashMap<>();

    public static void main(String[] args) throws IOException, InvalidFormatException {
        File file = new File("./data/stock_met_imageurls.xlsx");
        FileInputStream fis = new FileInputStream(file);
        Workbook workbook = new XSSFWorkbook(fis);
        Sheet datatypeSheet = workbook.getSheetAt(0);
        Iterator<Row> iterator = datatypeSheet.iterator();
        while (iterator.hasNext()) {
            Row currentRow = iterator.next();
            Iterator<Cell> cellIterator = currentRow.iterator();

            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();

                if(cell != null && cell.getCellTypeEnum().equals(CellType.STRING)) {
                    String image_url = null;
                    String product_id = null;

                    switch(cell.getColumnIndex()) {
                        case 0:
                            image_url = cell.getStringCellValue();
                            break;
                        case 2:
                            product_id = cell.getStringCellValue();
                            break;
                    }

                    if(image_url != null && product_id != null) {
                        PRODUCT_CODES_BY_IMAGES.put(product_id, image_url);
                    }

                }


            }
        }

        PRODUCT_CODES_BY_IMAGES.forEach((k, v) -> {
            System.out.println("key = " + k);
            System.out.println("val = " + v);
        });

        System.out.println("Size = " + PRODUCT_CODES_BY_IMAGES.size());
    }
}

导入org.apache.poi.openxml4j.exceptions.InvalidFormatException;
导入org.apache.poi.ss.usermodel.*;
导入org.apache.poi.xssf.usermodel.xssf工作簿;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.IOException;
导入java.util.*;
公共班机{
静态最终映射产品_代码_BY_IMAGES=new HashMap();
公共静态void main(字符串[]args)引发IOException、InvalidFormatException{
File File=新文件(“./data/stock_met_imageurls.xlsx”);
FileInputStream fis=新的FileInputStream(文件);
工作簿=新XSSF工作簿(fis);
工作表数据类型工作表=工作簿。getSheetAt(0);
迭代器迭代器=datatypeSheet.Iterator();
while(iterator.hasNext()){
Row currentRow=iterator.next();
迭代器cellIterator=currentRow.Iterator();
while(cellIterator.hasNext()){
Cell=cellIterator.next();
if(cell!=null&&cell.getCellTypeEnum().equals(CellType.STRING)){
字符串image_url=null;
字符串product_id=null;
开关(cell.getColumnIndex()){
案例0:
image_url=cell.getStringCellValue();
打破
案例2:
product_id=cell.getStringCellValue();
打破
}
if(image\u url!=null&&product\u id!=null){
产品代码由图片组成。put(产品id、图片url);
}
}
}
}
产品代码由图片组成。forEach((k,v)->{
System.out.println(“key=“+k”);
System.out.println(“val=”+v);
});
System.out.println(“Size=“+PRODUCT_code_BY_IMAGES.Size());
}
}
如果我在箱子下面做的话

System.out.println(“val=“+cell.getStringCellValue())

它正确地打印出来,但由于某种原因映射是空的


非常感谢您的帮助。

因为您的地图已声明为静态最终地图。检查

修复,我在映射中的元素添加到了错误的括号上方。

不确定这与任何事情有什么关系,静态意味着,整个项目中只有一个实例,最终意味着它不能进一步扩展,或者在这种情况下不能重新初始化。我只是在映射中输入值,还尝试删除最后一个关键字,但没有任何更改。即使在main()中声明映射也不会更改任何内容。您能分享一个Excel文件的示例吗?只要几行就可以了!