【发布时间】:2015-08-12 05:04:11
【问题描述】:
我有一个 selenium 测试,可以读取和写入一个 excel 文件。读取是通过将所有数据加载到哈希图中的 dataProvider 来实现的。我现在使用 Grid 同时运行多个线程。如何使用多线程实现写作?我阅读了有关同步方法的信息,但是当我将其应用于 outputStream 文件时,我遇到了失败。
我的代码:
public static void createOutputFile(String inputFilePath) {
inputFilePath = "InputPath";
outputFilePath = "OutputPath";
try {
inputFile = new FileInputStream(new File(inputFilePath));
workbook = WorkbookFactory.create(inputFile);
inputFile.close();
// save input data as output
outputFile = new FileOutputStream(outputFilePath);
workbook.write(outputFile);
outputFile.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static synchronized void writeToFile(Integer rowNumber, Integer cellNumber, String text) {
try {
//recreate workbook
FileInputStream file = new FileInputStream(new File(outputFilePath));
workbook = WorkbookFactory.create(file);
cell = workbook.getSheetAt(0).getRow(rowNumber).getCell(cellNumber);
if(cell == null)
cell = workbook.getSheetAt(0).getRow(rowNumber).createCell(cellNumber, Cell.CELL_TYPE_BLANK);
file.close();
outputFile = new FileOutputStream(outputFilePath);
if (rowNumber != null && cellNumber != null) {
try {
cell.setCellValue(text);
} catch (Exception e) {
System.err.println("Updating the file failed " + outputFilePath);
}
}
workbook.write(outputFile);
outputFile.close();
} catch (Exception e) {
e.printStackTrace();
}
}
【问题讨论】:
-
失败是什么意思?
-
您已经阅读过同步方法,但为什么没有尝试过呢?
-
同步你的方法 writeToFile 看看是否还有报错
-
@Adam 只是想知道:你认为学习多线程的最好方法是了解这么多复杂的上下文吗?为什么不首先关注“我如何使用多线程在 Java 中编程”?
-
@npinti:我收到此错误:org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException:保存失败:保存包时出错:/docProps/app.xml 部分无法保存使用 org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:500) 上的编组器 org.apache.poi.openxml4j.opc.internal.marshallers.DefaultMarshaller@c0fc09e0 保存在流中。 poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1417) at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:179) at
标签: java multithreading excel selenium selenium-grid