Java 读取Swift消息后关闭fileInputStream(妻子)

Java 读取Swift消息后关闭fileInputStream(妻子),java,inputstream,fileinputstream,swift-mt,Java,Inputstream,Fileinputstream,Swift Mt,我正在阅读SWIFT消息(MT103)并将其加载到数据库中。之后,我需要删除该文件,以避免在接下来的周期中进行第二次解析。但它不会在解析消息后自动关闭InputStream。如何关闭InputStream以便成功归档文件?当我尝试使用FileUtils归档文件时,我得到错误:在复制到“\home\Outswift\991904100973103097.out”后,未能删除原始文件“\home\swift\991904100973103097.out” public static void loa

我正在阅读SWIFT消息(MT103)并将其加载到数据库中。之后,我需要删除该文件,以避免在接下来的周期中进行第二次解析。但它不会在解析消息后自动关闭
InputStream
。如何关闭InputStream以便成功归档文件?当我尝试使用
FileUtils
归档文件时,我得到错误:
在复制到“\home\Outswift\991904100973103097.out”后,未能删除原始文件“\home\swift\991904100973103097.out”

public static void loadMessageInformationToDatabase(String sourceDir, File archiveDir) {
    log.debug("Listening to Incoming SWIFT Messages");
    File[] files = new File(sourceDir).listFiles();
    log.debug("Found " + files.length + " SWIFT Files for Processing");
    if (files.length > 0) {
        for (int i = 0; i < files.length; i++) {
            log.debug("Attepting to process file " + files[i].getAbsolutePath());
            int swiftSerialNumner = 0;
            try {
                MtSwiftMessage msg = MtSwiftMessage.parse(files[i]);
                String mtNumber = msg.getMessageType();
                String receiver = msg.getReceiver();
                String sender = msg.getSender();
                byte[] message = IOUtils.toByteArray(new FileInputStream(files[i]));
                String pde = msg.getPde();
                String instructedCurrency = "";
                double instructedAmount = 0.00;
                String inOutIndicator = "";
                if (msg.isIncoming()) {
                    inOutIndicator = "I";
                } else if (msg.isOutgoing()) {
                    inOutIndicator = "O";
                }
                String senderReference = "";
                if (mtNumber.equalsIgnoreCase("103")) {
                    MT103 model = MT103.parse(files[i]);
                    List<Field> fields = model.getFields();
                    for (Field field : fields) {
                        if (field.getName().equalsIgnoreCase("20")) {
                            senderReference = field.getValue();
                        }
                        if (field.getName().equalsIgnoreCase("33B")) {
                            instructedCurrency = field.getValue().substring(0, 3);
                            instructedAmount = Double.parseDouble(field.getValue().substring(3).replace(",", "."));
                        }
                    }
                }
                swiftSerialNumner = Swift.addSwiftMessage(mtNumber, receiver, message, "N", null, null, null, null, "S", "SYSTEM", new Date(), "Y", new Date(), "SYSTEM", new Date(), "SYSTEM", null, inOutIndicator, null, null, null, pde, "Y", receiver, sender, null, senderReference, null, instructedAmount, instructedCurrency, null, null, null, null, null, "N", "Y", "N", Gct.getBankId(), "Y");
                if (swiftSerialNumner > 0) {
                    log.debug("File " + files[i].getAbsolutePath() + " Parsed Successfully");
                    if (Swift.isDuplicateReference(senderReference)) {
                        Swift.markSwiftMessageAsDuplicate(swiftSerialNumner);
                        log.warn("SWIFT Serial " + swiftSerialNumner + " Marked as Duplicate");
                    }
                } else {
                    log.error("Error in Parsing File Name " + files[i].getAbsolutePath());
                }

                FileUtils.moveFileToDirectory(files[i], archiveDir, true);//Error comes on this line
                log.debug("SWIFT File " + files[i] + " archived in " + archiveDir.getAbsolutePath());
            } catch (IOException | NumberFormatException asd) {
                log.error("SWIFT Processing Error: " + asd.getMessage());
            }
        }
    }
}
publicstaticvoidloadmessageinformationtodatabase(字符串sourceDir,文件archiveDir){
log.debug(“侦听传入的SWIFT消息”);
File[]files=新文件(sourceDir).listFiles();
log.debug(“找到”+files.length+“处理的SWIFT文件”);
如果(files.length>0){
对于(int i=0;i0){
log.debug(“文件”+文件[i].getAbsolutePath()+“已成功解析”);
if(Swift.isDuplicateReference(senderReference)){
Swift.markSwiftMessageAsDuplicate(swifterialnumner);
日志警告(“SWIFT序列”+SWIFTERIALNUMNER+“标记为重复”);
}
}否则{
log.error(“解析文件名时出错”+文件[i].getAbsolutePath());
}
FileUtils.moveFileToDirectory(files[i],archiveDir,true);//这一行出现错误
log.debug(“SWIFT文件”+归档在“+archiveDir.getAbsolutePath()”中的文件[i]+”;
}捕获(IOException | NumberFormatException asd){
log.error(“SWIFT处理错误:+asd.getMessage());
}
}
}
}
试试这个:

FileInputStream fis = new FileInputStream(files[i])
byte[] message = IOUtils.toByteArray(fis);
并在fis结束时添加最后一条:

} catch (IOException | NumberFormatException asd) {
    log.error("SWIFT Processing Error: " + asd.getMessage());
} finally {
    fis.close()
}