• R/O
  • SSH
  • HTTPS

aoiro: Commit


Commit MetaInfo

Revision114 (tree)
Time2022-10-28 11:05:05
Authorhirukawa_ryo

Log Message

* aoiro 1.0.9
依存ライブラリ pdfbox 2.0.26 -> 2.0.27
Gradle 7.5 -> 7.6-milestone-1
BalanceSheet#createNextOpeningJournalEntries で次年度の開始仕訳.tmpを作成する Files.writeString 呼び出しで FileSystemException(ファイルにアクセスできません)がスローされたというバグ報告がありました。この対策として、FileWriter での書き込みを500ミリ秒ごとに最大10回試行する処理を追加しました。

Change Summary

Incremental Difference

--- aoiro/trunk/src/main/java/net/osdn/aoiro/report/BalanceSheet.java (revision 113)
+++ aoiro/trunk/src/main/java/net/osdn/aoiro/report/BalanceSheet.java (revision 114)
@@ -1,6 +1,8 @@
11 package net.osdn.aoiro.report;
22
33 import java.io.BufferedReader;
4+import java.io.File;
5+import java.io.FileWriter;
46 import java.io.IOException;
57 import java.io.InputStream;
68 import java.io.InputStreamReader;
@@ -7,6 +9,7 @@
79 import java.io.OutputStream;
810 import java.nio.charset.StandardCharsets;
911 import java.nio.file.AtomicMoveNotSupportedException;
12+import java.nio.file.FileSystemException;
1013 import java.nio.file.Files;
1114 import java.nio.file.Path;
1215 import java.nio.file.StandardCopyOption;
@@ -983,11 +986,33 @@
983986 Path dir = path.getParent();
984987 // 会計年度フォルダーが存在する場合のみ次年度の開始仕訳を作成します。
985988 tmpFile = dir.resolve("次年度の開始仕訳.tmp");
986- Files.writeString(tmpFile, s, StandardCharsets.UTF_8,
987- StandardOpenOption.CREATE,
988- StandardOpenOption.TRUNCATE_EXISTING,
989- StandardOpenOption.WRITE,
990- StandardOpenOption.SYNC);
989+ try {
990+ Files.writeString(tmpFile, s, StandardCharsets.UTF_8,
991+ StandardOpenOption.CREATE,
992+ StandardOpenOption.TRUNCATE_EXISTING,
993+ StandardOpenOption.WRITE,
994+ StandardOpenOption.SYNC);
995+ } catch(FileSystemException e) {
996+ e.printStackTrace();
997+ // Files.writeString の呼び出しで java.nio.file.FileSystemException(ファイルにアクセスできません。)がスローされるとバグ報告がありました。
998+ // 解決するか分かりませんが、java.nio ではなく java.io.FileWriter での書き込みを500ミリ秒ごとに最大10回試みます。
999+ File f = tmpFile.toFile();
1000+ for(int i = 9; i >= 0; i--) {
1001+ try {
1002+ try(FileWriter writer = new FileWriter(f, StandardCharsets.UTF_8)) {
1003+ writer.write(s);
1004+ writer.flush();
1005+ }
1006+ break;
1007+ } catch(IOException e2) {
1008+ e2.printStackTrace();
1009+ if(i == 0) {
1010+ throw e2;
1011+ }
1012+ }
1013+ try { Thread.sleep(500); } catch(InterruptedException ignore) {}
1014+ }
1015+ }
9911016
9921017 try {
9931018 Files.move(tmpFile, path,
Show on old repository browser