Revision | 114 (tree) |
---|---|
Time | 2022-10-28 11:05:05 |
Author | ![]() |
* 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回試行する処理を追加しました。
@@ -1,6 +1,8 @@ | ||
1 | 1 | package net.osdn.aoiro.report; |
2 | 2 | |
3 | 3 | import java.io.BufferedReader; |
4 | +import java.io.File; | |
5 | +import java.io.FileWriter; | |
4 | 6 | import java.io.IOException; |
5 | 7 | import java.io.InputStream; |
6 | 8 | import java.io.InputStreamReader; |
@@ -7,6 +9,7 @@ | ||
7 | 9 | import java.io.OutputStream; |
8 | 10 | import java.nio.charset.StandardCharsets; |
9 | 11 | import java.nio.file.AtomicMoveNotSupportedException; |
12 | +import java.nio.file.FileSystemException; | |
10 | 13 | import java.nio.file.Files; |
11 | 14 | import java.nio.file.Path; |
12 | 15 | import java.nio.file.StandardCopyOption; |
@@ -983,11 +986,33 @@ | ||
983 | 986 | Path dir = path.getParent(); |
984 | 987 | // 会計年度フォルダーが存在する場合のみ次年度の開始仕訳を作成します。 |
985 | 988 | 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 | + } | |
991 | 1016 | |
992 | 1017 | try { |
993 | 1018 | Files.move(tmpFile, path, |