1 package charactermanaj.model.io;
\r
4 import java.io.IOException;
\r
8 public class CharacterDataFileReaderWriterFactory {
\r
10 private static final CharacterDataFileReaderWriterFactory singleton = new CharacterDataFileReaderWriterFactory();
\r
12 private CharacterDataFileReaderWriterFactory() {
\r
16 public static CharacterDataFileReaderWriterFactory getInstance() {
\r
21 * ファイルの拡張子に応じてzip/cmj形式でのライターを構築して帰します.<br>
\r
22 * 拡張子がjarとcmjは同じ意味で、ともにjarファイル形式となります.<br>
\r
23 * zip/cmj/jar以外の拡張子はIOExceptionとなります.<br>
\r
24 * @param outfile 出力先ファイル名
\r
26 * @throws IOException 該当するライターがみつからない場合
\r
28 public CharacterDataWriter createWriter(File outfile) throws IOException {
\r
29 if (outfile == null) {
\r
30 throw new IllegalArgumentException();
\r
33 String name = outfile.getName().toLowerCase();
\r
34 if (name.endsWith(".jar") || name.endsWith(".cmj")) {
\r
35 return new CharacterDataJarFileWriter(outfile);
\r
37 } else if (name.endsWith(".zip")) {
\r
38 return new CharacterDataZipFileWriter(outfile);
\r
41 throw new IOException("unsupported file type: " + name);
\r
44 public CharacterDataArchiveFile openArchive(URI archiveFile) throws IOException {
\r
45 if (archiveFile == null) {
\r
46 throw new IllegalArgumentException();
\r
49 if ("file".equals(archiveFile.getScheme())) {
\r
51 File file = new File(archiveFile);
\r
52 return openArchive(file);
\r
55 // file以外は現在のところサポートしない。
\r
56 throw new UnsupportedOperationException();
\r
60 public CharacterDataArchiveFile openArchive(File archiveFile) throws IOException {
\r
61 if (archiveFile == null) {
\r
62 throw new IllegalArgumentException();
\r
65 if (archiveFile.exists() && archiveFile.isDirectory()) {
\r
67 return new CharacterDataDirectoryFile(archiveFile);
\r
71 String name = archiveFile.getName().toLowerCase();
\r
72 if (name.endsWith(".jar") || name.endsWith(".cmj")) {
\r
73 return new CharacterDataJarArchiveFile(archiveFile);
\r
75 } else if (name.endsWith(".zip")) {
\r
76 return new CharacterDataZipArchiveFile(archiveFile);
\r
79 throw new IOException("unsupported file type: " + name);
\r