Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
4.0k views
in Technique[技术] by (71.8m points)

文件导出时,偶尔会导出两个不同类型,内容却一致的文件?

环境:linux,jdk 1.8

问题:打包导出文件时,两个不同的文件,内容一致。理论上来说应该是不同的文件,本地windows系统没有发现这个问题。也有可能是存在问题,但是没有发生。

我猜测在文件导出时,实际上,生成了两个不同的文件。但是在生成打包文件信息时出现了问题。

相关代码:

// 存放临时文件信息,用于将文件以压缩包导出
List<Map<String, String>> tempFileList = new ArrayList<>();
// 模板名称
String templateA = "ChineseTemplate.doc";
String templateB = "EnglishTemplate.doc";
// 临时文件名称
File tempFileA = new File(TEMP_FILE, 'ChineseName.doc');
File tempFileB = new File(TEMP_FILE, 'EnglishName.doc');
// ReportUtils是封装的导出方法,以template作为模板,填充数据,导出到临时文件
// dataA与dataB为填充到模板中的数据
ReportUtils.export(templateA, dataA, tempFileA.getAbsolutePath());
ReportUtils.export(templateB, dataB, tempFileB.getAbsolutePath());

// 可能出现问题的位置
Map<String, String> fileInfoMap = new HashMap<>();
// fileName:打包导出时临时文件的名称,path:临时文件路径
fileInfoMap.put("fileName", tempFileA.getName());
fileInfoMap.put("path", tempFileA.getAbsolutePath());
tempFileList.add(fileInfoMap);

fileInfoMap = new HashMap<>();
fileInfoMap.put("fileName", tempFileB.getName());
fileInfoMap.put("path", tempFileB.getAbsolutePath());
tempFileList.add(fileInfoMap);

.....
// 将tempFileList中的文件打包导出
.....

将第二个临时文件的fileInfoMap,如果定义为新的引用,例如,fileInfoMap2,则导出时没有任何问题。

期望导出的是两个文件名不同,内容也不同的文件。但是偶尔会导出文件名称不同,内容相同的问题。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

文件名不同内容相同,看上去问题出在dataA和dataB上,像这样一模一样重复的代码最好封装成一个方法,把不同的部分作为参数传入,而不是上面这样重写,代码量大,不易修改和除错。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...