我有一个复制二进制文件的功能
public static void copyFile(String Src, String Dst) throws FileNotFoundException, IOException {
File f1 = new File(Src);
File f2 = new File(Dst);
FileInputStream in = new FileInputStream(f1);
FileOutputStream out = new FileOutputStream(f2);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
和第二个功能
private String copyDriverToSafeLocation(String driverPath) {
String safeDir = System.getProperty("user.home");
String safeLocation = safeDir + "\\my_pkcs11tmp.dll";
try {
Utils.copyFile(driverPath, safeLocation);
return safeLocation;
} catch (Exception ex) {
System.out.println("Exception occured while copying driver: " + ex);
return null;
}
}
第二个函数针对系统中找到的每个驱动程序运行。驱动程序文件被复制,我正在尝试使用该驱动程序初始化 PKCS11。如果初始化失败,我会转到下一个驱动程序,我将其复制到 tmp 位置,依此类推。
初始化在 try/catch 块中第一次失败后,我不再能够将下一个驱动程序复制到标准位置。
我得到了例外
Exception occured while copying driver: java.io.FileNotFoundException: C:\Users\Norbert\my_pkcs11tmp.dll (The process cannot access the file because it is being used by another process)
如何避免异常并安全地复制驱动程序文件?
对于那些好奇我为什么要复制驱动程序的人... PKCS11 有讨厌的BUG,它阻止使用存储在路径中具有“(”的位置的驱动程序...这是我面临的情况。
我会感谢你的帮助。