У меня есть функция, которая копирует двоичный файлисключение во время копирования файлов в Java
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, который предотвращает использование драйверов, хранящихся в месте, где есть "(" в пути ... и это случай, с которым я сталкиваюсь .
Я ценю вашу помощь.
Благодарим всех вас за ваши комментарии. Я не хочу использовать дополнительные библиотеки, такие как apache, поскольку, наконец, этот код должен запускаться апплетом. Все остальное, что я пробовал, но кажется, что файл dest используется. Я даже попробовал отвратительное решение и перечислил драйверы (и добавил номер в имя dst-файла), но когда я запустил его с помощью файла dst-апплета, он используется, когда апплет запускается более одного раза. – norbi771