Javaを使用して既存のExcelファイルに書き込んでいます。これはfileAです。 (私はこれにAPACHE POIを使用しています) excel fileAが誰かによって開かれている可能性があります。多くの人がアクセスする共有フォルダに保存されます。書き込みを行う前にExcelファイルを強制終了する
私は
java.io.FileNotFoundException遭遇しないようにしたい:既存の場合はどんなにので(それは別のプロセスによって使用されているため、プロセスはファイル にアクセスすることはできません)
をExcelファイルが開かれているかどうか、Javaアプリケーションの出力を保存する必要があります。
調査したところ、私はJavaコード内でfileA(Javaアプリケーションではなく他のプロセス/ユーザーによって開かれたファイル)を閉じることは不可能だと思います。
私が今やっていることは、新しいExcelファイルを作成することです。たとえば、fileAが現在開いている場合はfileBと言います。私は以下のコードを使用しています。 ファイルfile = 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の オープンXML)ではないではありません。このようにしてみてください
どの行でその例外が生成されますか? –
Apache POI 3.15を試しましたか?それは、壊れたファイルや空のファイルの周りの一般的なユーザーエラーのエラーメッセージがすべてあります。 – Gagravarr
他のユーザーがアクセスできないサンドボックスにファイルをコピーしようとしましたか(ByteArrayストリームのメモリ内か、コンピュータまたはアプリケーションがアクセスできる)、完了したらファイルをネットワークドライブにコピーし直しますか? – IceArdor