Я пишу в существующий файл excel с использованием Java, скажем, что это файлA. (Я использую APACHE POI для этого.) Возможно, что файл excelA открывается кем-то. Он сохраняется в общей папке, доступ к которой осуществляется множеством людей.Закрепить файл excel перед его записью
Я хочу, чтобы избежать столкновения
java.io.FileNotFoundException: (Процесс не может получить доступ к файлу , так как он используется другим процессом)
Потому что независимо от того, если существующий файл excel открыт или нет, мне нужно сохранить вывод моего приложения Java.
При исследовании, я думаю, что невозможно закрыть fileA (открытый другим процессом/пользователем, а не моим Java-приложением) в моем Java-коде.
Что я сейчас делаю, это создать новый файл excel, скажем fileB, если файлA открыт. Я использую код ниже. Файл файла = null;
FileOutputStream out = null;
int workbookNo = 0;
do{
String append = "";
if(workbookNo != 0){
append = "_Copy" + Integer.toString(workbookNo);
}
file = new File(filePath + "ValidateLock_" + dataDate + append + ".xlsx");
try{
out = new FileOutputStream(file);
workbookNo = 0;
}catch(FileNotFoundException e){
//e.printStackTrace();
workbookNo++;
}
}while(workbookNo != 0);
Однако, я получаю сообщение об ошибке ниже.
org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException: Нет допустимые значения или содержимое не найдено, это не является допустимым OOXML (Office Open XML ) файл
И какая линия производит это исключение? –
Вы пытались использовать Apache POI 3.15? У него лучшие сообщения об ошибках для общих ошибок пользователя в отношении сломанных или пустых файлов - все – Gagravarr
Вы пытались копировать файлы в песочницу, недоступную другим пользователям (либо в памяти с потоком ByteArray, либо на локальном диске, компьютер или приложение имеют доступ), а затем копирование файлов обратно на сетевой диск, когда вы закончите? – IceArdor