ファイルã®èªã¿æ›¸ãã‚’ä¼´ã†ãƒ—ãƒã‚°ãƒ©ãƒ ã§ã€ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›¸ãè¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã«ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã—ã€ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã™ã‚‹ãŸã‚ã®ç°¡å˜ãªJavaã®ä¾‹ã‚’以下ã«ç¤ºã—ã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€FileWriter を使用ã—ã¦ãƒ•ァイルã«ãƒ†ã‚ストを書ãè¾¼ã¿ã¾ã™ã€‚
import java.io.FileWriter;
import java.io.IOException;
public class FileReadWriteExample {
public static void main(String[] args) {
String filePath = "example.txt";
try {
// ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›¸ãè¾¼ã¿ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³é–‹å§‹
writeToFile(filePath, "Hello, World!");
// ファイルã¸ã®æ›¸ãè¾¼ã¿ãŒæˆåŠŸã—ãŸå ´åˆã®å‡¦ç†
System.out.println("ファイルã¸ã®æ›¸ãè¾¼ã¿ãŒæˆåŠŸã—ã¾ã—ãŸã€‚");
} catch (IOException e) {
// ファイルã¸ã®æ›¸ãè¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã®å‡¦ç†
System.out.println("ファイルã¸ã®æ›¸ãè¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚");
e.printStackTrace();
// トランザクションã®ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯
// ã“ã“ã§åˆ¥ã®ä¾‹å¤–処ç†ã‚„ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã®ãŸã‚ã®ã‚³ãƒ¼ãƒ‰ã‚’è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
}
}
private static void writeToFile(String filePath, String content) throws IOException {
// ファイルを書ã込む際ã«ç™ºç”Ÿã™ã‚‹ä¾‹å¤–ã‚’ã‚ャッãƒã—ã¦ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã™ã‚‹
try (FileWriter writer = new FileWriter(filePath)) {
writer.write(content);
}
}
}
ã“ã®ä¾‹ã§ã¯ã€FileWriter ã§ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ãè¾¼ã¿ã‚’行ã„ã¾ã™ã€‚writeToFile メソッド内ã§ãƒ•ァイルã¸ã®æ›¸ãè¾¼ã¿ãŒè¡Œã‚れã€ã‚‚ã—IOException ãŒç™ºç”Ÿã—ãŸå ´åˆã«ã¯ã€ãれをã‚ャッãƒã—ã¦ã‚¨ãƒ©ãƒ¼ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’表示ã—ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã—ã¾ã™ã€‚ã“れã¯ãƒ•ã‚¡ã‚¤ãƒ«ã®æ›¸ãè¾¼ã¿ãŒå¤±æ•—ã—ãŸå ´åˆã«å®Ÿè¡Œã•れるエラーãƒãƒ³ãƒ‰ãƒªãƒ³ã‚°ã®ä¸€ä¾‹ã§ã™ã€‚
ファイル処ç†ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã¨ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯
ファイル処ç†ã«ãŠã‘るトランザクションã¨ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã¯ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã¨åŒã˜ã‚ˆã†ãªè€ƒãˆæ–¹ã‚’é©ç”¨ã™ã‚‹ã‚‚ã®ã§ã€ç‰¹å®šã®ä¸€é€£ã®æ“作ãŒã¾ã¨ã¾ã‚Šã¨ã—ã¦æ‰±ã‚れã€ãã‚Œã‚‰ã®æ“作ãŒå…¨ã¦æˆåŠŸã—ãŸå ´åˆã«å¤‰æ›´ã‚’確定ã•ã›ã€é€”ä¸ã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã«ã¯å¤‰æ›´ã‚’å…ƒã«æˆ»ã™ã¨ã„ã†ä»•組ã¿ã§ã™ã€‚
以下ã«ã€Javaを使用ã—ãŸç°¡å˜ãªãƒ•ァイル処ç†ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã¨ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚’模擬ã™ã‚‹ä¾‹ã‚’示ã—ã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯ã€ãƒ•ァイルã¸ã®æ›¸ãè¾¼ã¿ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’é–‹å§‹ã—ã€æ›¸ãè¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã«ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã™ã‚‹ä»®æƒ³çš„ãªæ¦‚念をå–り入れã¦ã„ã¾ã™ã€‚
import java.io.FileWriter;
import java.io.IOException;
public class FileTransactionExample {
public static void main(String[] args) {
String filePath = "example.txt";
// ファイルã¸ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³é–‹å§‹
try (FileTransaction transaction = new FileTransaction(filePath)) {
// ファイルã¸ã®æ›¸ãè¾¼ã¿
transaction.writeToFile("Hello, World!");
// トランザクションã®ã‚³ãƒŸãƒƒãƒˆï¼ˆæ£å¸¸çµ‚了)
transaction.commit();
} catch (IOException e) {
// トランザクションä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã®å‡¦ç†
System.out.println("トランザクションä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚");
e.printStackTrace();
}
}
private static class FileTransaction implements AutoCloseable {
private final String filePath;
private boolean committed;
public FileTransaction(String filePath) {
this.filePath = filePath;
this.committed = false;
}
public void writeToFile(String content) throws IOException {
// ファイルã¸ã®æ›¸ãè¾¼ã¿ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ã‚’考慮ã—ãŸå‡¦ç†
// (例ãˆã°ã€ãƒ•ァイルãŒå˜åœ¨ã—ãªã„å ´åˆã‚„書ãè¾¼ã¿æ¨©é™ãŒãªã„å ´åˆï¼‰
try (FileWriter writer = new FileWriter(filePath)) {
writer.write(content);
}
}
public void commit() {
committed = true;
}
@Override
public void close() throws IOException {
// トランザクションã®ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯å‡¦ç†
if (!committed) {
System.out.println("トランザクションãŒãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã•れã¾ã—ãŸã€‚");
// ファイルã®å¤‰æ›´ã‚’å…ƒã«æˆ»ã™ãŸã‚ã®ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯å‡¦ç†ã‚’ã“ã“ã«è¿½åŠ ã™ã‚‹
}
}
}
}
FileTransaction クラスã®å½¹å‰²:
- FileTransaction クラスã¯ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã®å˜ä½ã‚’表ã—ã¾ã™ã€‚ã“れ㯠AutoCloseable インターフェースを実装ã—ã¦ãŠã‚Šã€try-with-resources æ–‡ã§ä½¿ç”¨ã§ãã¾ã™ã€‚
- ファイルパスã¨ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚³ãƒŸãƒƒãƒˆçŠ¶æ…‹ã‚’ç®¡ç†ã—ã¾ã™ã€‚
private static class FileTransaction implements AutoCloseable {
private final String filePath;
private boolean committed;
// コンストラクタ
public FileTransaction(String filePath) {
this.filePath = filePath;
this.committed = false;
}
}
トランザクション内ã®ãƒ•ァイル書ãè¾¼ã¿:
- writeToFile メソッドã¯ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³å†…ã§ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ã込むæ“作を担当ã—ã¾ã™ã€‚
- トランザクションä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãªã„é™ã‚Šã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã§ã®ãƒ•ァイル書ãè¾¼ã¿ã¯ã‚³ãƒŸãƒƒãƒˆã•れるã“ã¨ã«ãªã‚Šã¾ã™ã€‚
public void writeToFile(String content) throws IOException {
try (FileWriter writer = new FileWriter(filePath)) {
writer.write(content);
}
}
トランザクションã®ã‚³ãƒŸãƒƒãƒˆ:
- commit メソッドã¯ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ãŒæ£å¸¸ã«çµ‚了ã—ãŸã“ã¨ã‚’示ã—ã¾ã™ã€‚
public void commit() {
committed = true;
}
トランザクションã®ã‚¯ãƒãƒ¼ã‚º (AutoCloseable インターフェース):
- close メソッド㯠AutoCloseable インターフェースã®ä¸€éƒ¨ã§ã‚りã€try-with-resources ブãƒãƒƒã‚¯ãŒçµ‚了ã™ã‚‹éš›ã«å‘¼ã³å‡ºã•れã¾ã™ã€‚
- ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã§ã¯ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ãŒæ£å¸¸ã«çµ‚了ã—ã¦ã„ãªã„å ´åˆã€ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯å‡¦ç†ãŒè¡Œã‚れã¾ã™ã€‚
@Override
public void close() throws IOException {
// トランザクションã®ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯å‡¦ç†
if (!committed) {
// ファイルã®å¤‰æ›´ã‚’å…ƒã«æˆ»ã™ãŸã‚ã®ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯å‡¦ç†ã‚’ã“ã“ã«è¿½åŠ ã™ã‚‹
}
}
トランザクションã®åˆ©ç”¨:
main メソッドã§ã¯ã€try-with-resources 文を使用ã—ã¦ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’é–‹å§‹ã—ã€ãƒ•ァイルã¸ã®æ›¸ãè¾¼ã¿ã‚’行ã„ã¾ã™ã€‚ã“ã®ã¨ãã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹ã¨ã€FileTransaction クラス㮠close メソッドãŒå‘¼ã°ã‚Œã€ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯å‡¦ç†ãŒè¡Œã‚れã¾ã™ã€‚
try (FileTransaction transaction = new FileTransaction(filePath)) {
// ファイルã¸ã®æ›¸ãè¾¼ã¿
transaction.writeToFile("Hello, World!");
// トランザクションã®ã‚³ãƒŸãƒƒãƒˆï¼ˆæ£å¸¸çµ‚了)
transaction.commit();
} catch (IOException e) {
// トランザクションä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã®å‡¦ç†
System.out.println("トランザクションä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚");
e.printStackTrace();
}
ã“ã®ã‚ˆã†ã«ã€ãƒ•ァイル処ç†ã«ãŠã‘るトランザクションã¨ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã¯ã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ãŸå ´åˆã«å¤‰æ›´ã‚’å–り消ã™ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã‚’æä¾›ã—ã€ãƒ‡ãƒ¼ã‚¿ã®æ•´åˆæ€§ã‚’ç¶æŒã—ã¾ã™ã€‚ãŸã ã—ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã¨ã¯ç•°ãªã‚Šã€ãƒ•ァイル処ç†ã«ãŠã„ã¦ã¯æ°¸ç¶šæ€§ãªã©ãŒç›´æŽ¥çš„ã«æä¾›ã•れãªã„ã“ã¨ã«ç•™æ„ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
ァイル処ç†ã«ãŠã‘るトランザクションã¨ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã¯ã€ãƒ‡ãƒ¼ã‚¿æ•´åˆæ€§ã¨ã‚¨ãƒ©ãƒ¼å‡¦ç†ã®é¢ã§é‡è¦ãªæ¦‚念ã§ã™ã€‚ã“れã«ã‚ˆã‚Šã€ãƒ•ァイルã¸ã®å¤‰æ›´ãŒé€”ä¸ã§ã‚¨ãƒ©ãƒ¼ã‚’引ãèµ·ã“ã—ãŸå ´åˆã§ã‚‚ã€ãƒ‡ãƒ¼ã‚¿ãŒçŸ›ç›¾ã›ãšã€å®‰å…¨ã«å¾©å…ƒã§ãã‚‹ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ãŒæä¾›ã•れã¾ã™ã€‚
é‡è¦ãªãƒã‚¤ãƒ³ãƒˆã¨ã—ã¦ã€ãƒ•ァイル処ç†ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã¨ã¯ç•°ãªã‚Šã€ãƒ‡ãƒ¼ã‚¿ã®æ°¸ç¶šæ€§ãŒç›´æŽ¥çš„ã«ã‚µãƒãƒ¼ãƒˆã•れãªã„ã“ã¨ãŒæŒ™ã’られã¾ã™ã€‚ãã®ãŸã‚ã€ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã®ç¯„囲内ã§ã®å¤‰æ›´ã¯ã€ã‚¢ãƒ—リケーション内ã§ã®ã¿å½±éŸ¿ã‚’åŠã¼ã—ã¾ã™ã€‚
トランザクションã¨ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã‚’利用ã™ã‚‹ã“ã¨ã§ã€ãƒ•ァイル処ç†ã«ãŠã„ã¦ã‚‚ä¿¡é ¼æ€§ã®é«˜ã„データ管ç†ãŒå¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚エラーã¸ã®æŸ”軟ãªå¯¾å¿œã‚„ãƒ‡ãƒ¼ã‚¿æ•´åˆæ€§ã®ç¢ºä¿ã¯ã€å …牢ã§å®‰å…¨ãªãƒ•ァイル処ç†ã‚¢ãƒ—リケーションを構築ã™ã‚‹ä¸Šã§ä¸å¯æ¬ ãªã‚¹ã‚ルã¨ãªã‚Šã¾ã™ã€‚
「019 例外ã¨ä¾‹å¤–処ç†ã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント