OSDN Git Service

mavenによるビルドに変更
[charactermanaj/CharacterManaJ.git] / src / main / java / charactermanaj / util / FileUserData.java
1 package charactermanaj.util;\r
2 \r
3 import java.io.BufferedInputStream;\r
4 import java.io.BufferedOutputStream;\r
5 import java.io.File;\r
6 import java.io.FileInputStream;\r
7 import java.io.FileOutputStream;\r
8 import java.io.IOException;\r
9 import java.io.InputStream;\r
10 import java.io.ObjectInputStream;\r
11 import java.io.ObjectOutputStream;\r
12 import java.io.OutputStream;\r
13 import java.util.logging.Level;\r
14 import java.util.logging.Logger;\r
15 \r
16 /**\r
17  * ファイルベースのユーザーデータの保存先の実装\r
18  * @author seraphy\r
19  */\r
20 public class FileUserData implements UserData {\r
21 \r
22         /**\r
23          * ロガー\r
24          */\r
25         private static final Logger logger = Logger.getLogger(FileUserData.class.getName());\r
26 \r
27         /**\r
28          * 保存先ファイル\r
29          */\r
30         private File file;\r
31         \r
32         public FileUserData(File file) {\r
33                 if (file == null) {\r
34                         throw new IllegalArgumentException();\r
35                 }\r
36                 this.file = file;\r
37         }\r
38         \r
39         public boolean exists() {\r
40                 return file.exists() && file.isFile();\r
41         }\r
42         \r
43         public long lastModified() {\r
44                 return file.lastModified();\r
45         }\r
46         \r
47         public InputStream openStream() throws IOException {\r
48                 return new BufferedInputStream(new FileInputStream(file));\r
49         }\r
50         \r
51         public OutputStream getOutputStream() throws IOException {\r
52                 return new BufferedOutputStream(new FileOutputStream(file));\r
53         }\r
54         \r
55         public boolean delete() {\r
56                 try {\r
57                         return file.delete();\r
58 \r
59                 } catch (Exception ex) {\r
60                         // セキュリティ例外ぐらい.\r
61                         logger.log(Level.WARNING, "file removing failed." + file, ex);\r
62                         return false;\r
63                 }\r
64         }\r
65         \r
66         public void save(Object userData) throws IOException {\r
67                 ObjectOutputStream oos = new ObjectOutputStream(getOutputStream());\r
68                 try {\r
69                         oos.writeObject(userData);\r
70                         oos.close();\r
71                 } finally {\r
72                         oos.close();\r
73                 }\r
74         }\r
75 \r
76         public Object load() throws IOException {\r
77                 ObjectInputStream ois = new ObjectInputStream(openStream());\r
78                 try {\r
79                         try {\r
80                                 return ois.readObject();\r
81 \r
82                         } catch (ClassNotFoundException ex) {\r
83                                 // 復元先クラスがみつからないということは、このアプリケーションの保存した形式としておかしい\r
84                                 IOException ex2 = new IOException("invalid format.");\r
85                                 ex2.initCause(ex2);\r
86                                 throw ex2;\r
87                         }\r
88                 } finally {\r
89                         ois.close();\r
90                 }\r
91         }\r
92         \r
93         @Override\r
94         public String toString() {\r
95                 return "FileUserData{file:" + file + "}";\r
96         }\r
97 }