解説動画
シリアライズすればオブジェクトをそのまま保存できるので便利ですね。
■動画はこちら
■Youtube版の解説で使用しているソースコード
動画と一緒にこちらも参考にどうぞ。
シリアライズするオブジェクト
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | import java.io.Serializable; public class TestData implements Serializable { private String data1 = null; private String data2 = null; private String data3 = null; public String getData1() { return data1; } public void setData1(String data1) { this.data1 = data1; } public String getData2() { return data2; } public void setData2(String data2) { this.data2 = data2; } public String getData3() { return data3; } public void setData3(String data3) { this.data3 = data3; } } |
オブジェクトのファイル出力
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; public class SerializeFileWriter { /** * オブジェクトの書き込み * @param fileName 保存先のファイル名(パスもつける) * @param o 保存するオブジェクト * @throws IOException 書き込み時の例外 */ public static void write(String fileName, Object o) throws IOException { //ファイルの書き込み準備 try(FileOutputStream fos = new FileOutputStream(fileName); ObjectOutputStream oos = new ObjectOutputStream(fos)) { //オブジェクトの書き込み(シリアライズ) oos.writeObject(o); oos.flush(); } } } |
オブジェクトの読み込み・復元
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import java.io.FileInputStream; import java.io.IOException; import java.io.ObjectInputStream; public class SerializeFileReader { /** * オブジェクトの読み込み * @param fileName 保存したファイル名 * @return 読み込んだオブジェクト * @throws IOException 読み込み時の例外 * @throws ClassNotFoundException オブジェクトのクラスが見つからない時の例外 */ public static Object read(String fileName) throws IOException, ClassNotFoundException { //ファイルの読み込み準備 try(FileInputStream fis = new FileInputStream(fileName); ObjectInputStream ois = new ObjectInputStream(fis)){ //オブジェクトの読み込み(デシリアライズ) return ois.readObject(); } } } |
プログラム(本体)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | import java.io.File; import java.util.Scanner; public class Program { private static final String FILE_NAME = "R:\\SaveData\\Save.dat"; public static void main(String[] args) { try { //入力データ(保存の対象) TestData data = null; //入力データの保存ファイルがあるかチェック if(new File(FILE_NAME).exists()) { //入力データのファイルがあれば、復元 data = (TestData)SerializeFileReader.read(FILE_NAME); System.out.println("【再開・入力済みデータ】"); if(data.getData1() != null) { System.out.println(" 1つ目:" + data.getData1()); } if(data.getData2() != null) { System.out.println(" 2つ目:" + data.getData2()); } if(data.getData3() != null) { System.out.println(" 3つ目:" + data.getData3()); } } else { //入力データのファイルがなければ、新規 data = new TestData(); } //入力の受付を準備 try(Scanner scan = new Scanner(System.in)) { //1つ目 if(data.getData1() == null) { //1つ目のデータを入力 System.out.println("【1つ目】数値を入力してください。(Xで中断)"); String in = scan.next(); if("X".equals(in)) { //中断:入力データを保存して終了 SerializeFileWriter.write(FILE_NAME, data); return ; } data.setData1(in); } //2つ目 if(data.getData2() == null) { //2つ目のデータを入力 System.out.println("【2つ目】数値を入力してください。(Xで中断)"); String in = scan.next(); if("X".equals(in)) { //中断:入力データを保存して終了 SerializeFileWriter.write(FILE_NAME, data); return ; } data.setData2(in); } //3つ目 if(data.getData3() == null) { //3つ目のデータを入力 System.out.println("【3つ目】数値を入力してください。(Xで中断)"); String in = scan.next(); if("X".equals(in)) { //中断:入力データを保存して終了 SerializeFileWriter.write(FILE_NAME, data); return ; } data.setData3(in); } } //3つの入力が終わったら、合計を表示して、保存したファイルを削除。 int total = Integer.parseInt(data.getData1()) + Integer.parseInt(data.getData2()) + Integer.parseInt(data.getData3()); System.out.println("【計算結果】"); System.out.println(" 1つ目:" + data.getData1()); System.out.println(" 2つ目:" + data.getData2()); System.out.println(" 3つ目:" + data.getData3()); System.out.println(" 合 計:" + total); new File(FILE_NAME).delete(); } catch(Exception e) { e.printStackTrace(); } } } |