1 package jp.sourceforge.gokigen.memoma;
3 import android.os.Environment;
4 import android.util.Log;
6 import java.io.FileInputStream;
7 import java.io.FileOutputStream;
8 import java.io.InputStream;
9 import java.io.OutputStream;
10 import java.text.SimpleDateFormat;
11 import java.util.Calendar;
14 * 外部ストレージにデータを記録するために使うユーティリティ
18 public class ExternalStorageFileUtility
20 private final int COPY_BUFFER_SIZE = 32768;
21 private final int BUFFER_MARGIN = 4;
23 private String baseDirectory = "/";
29 public ExternalStorageFileUtility(String offsetDir)
31 /** ベースディレクトリの作成 (あれば何もしない) **/
32 prepareBaseDirectory(offsetDir);
39 private boolean prepareBaseDirectory(String offsetDir)
41 String gokigenDirectory = Environment.getExternalStorageDirectory().getPath() + "/Gokigen";
44 File baseDir = new File(gokigenDirectory);
45 if (baseDir.exists() == false)
47 if (baseDir.mkdirs() == false)
49 // ベースディレクトリ作成失敗...終了する
50 baseDirectory = Environment.getExternalStorageDirectory().getPath();
55 gokigenDirectory = gokigenDirectory + offsetDir;
57 baseDir = new File(gokigenDirectory);
58 if (baseDir.exists() == false)
60 if (baseDir.mkdirs() == false)
62 // ベースディレクトリ作成失敗...終了する
63 baseDirectory = Environment.getExternalStorageDirectory().getPath() + "/Gokigen";
68 baseDirectory = gokigenDirectory;
73 Log.v(Main.APP_IDENTIFIER, "prepareBaseDirectory() : " + ex.getMessage());
75 baseDirectory = Environment.getExternalStorageDirectory().getPath();
81 * @return 書き込みを行うアプリ用ベースディレクトリ
83 public String getGokigenDirectory()
85 return (baseDirectory);
94 public boolean makeDirectory(String dirName)
96 String makeDir = baseDirectory + "/" + dirName;
99 File dir = new File(makeDir);
100 if (dir.exists() == false)
102 return (dir.mkdirs());
108 Log.v(Main.APP_IDENTIFIER, "makeDirectory() : " + ex.getMessage());
115 * @param fileName ファイル名
116 * @param isAppend 追記モードでオープンするか?
119 public FileOutputStream openFileStream(String fileName, boolean isAppend)
123 String targetName = baseDirectory + "/" + fileName;
124 FileOutputStream fileStream = new FileOutputStream(targetName, isAppend);
129 Log.v(Main.APP_IDENTIFIER, "openFileStream() : " + e.getMessage());
135 * 日単位でディレクトリを作成し、そこに書き込むためのファイル名を決定する
138 private String decideFileNameWithSpecifiedDate(String fileName, String year, String month, String date)
140 String directory = year;
145 directory = directory + "/" + year + month;
148 makeDirectory(directory);
150 directory = directory + "/" + year + month + date;
153 makeDirectory(directory);
155 return (directory + "/" + year + month + date + "-" + fileName);
159 * 日単位でディレクトリを作成し、そこに書き込むためのファイル名を決定する
162 public String decideFileNameWithDate(String fileName)
164 Calendar calendar = Calendar.getInstance();
166 SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy");
167 SimpleDateFormat monthFormat = new SimpleDateFormat("MM");
168 SimpleDateFormat dateFormat = new SimpleDateFormat("dd");
170 String year = yearFormat.format(calendar.getTime());
171 String month = monthFormat.format(calendar.getTime());
172 String date = dateFormat.format(calendar.getTime());
174 return (decideFileNameWithSpecifiedDate(fileName, year, month, date));
178 * 日単位でディレクトリを作成し、そこに書き込むためのファイル名を決定する
181 public String decideFileNameWithSpecifiedDate(String fileName, int year, int month, int day)
183 String yearStr = year + "";
184 String monthStr = "";
187 monthStr = "0" + month;
191 monthStr = month + "";
202 return (decideFileNameWithSpecifiedDate(fileName, yearStr, monthStr, dayStr));
212 public String decideDateDirectory(int year, int month, int date)
214 String addMonth = "";
216 String directory = baseDirectory + "/" + year + "/";
225 directory = directory + year + addMonth + month + "/" + year + addMonth + month + addDate + date + "/";
230 * ファイルのコピー (kaniFilerから持ってきた...)
232 * @param destFileName コピー先ファイル (full path)
233 * @param srcFileName コピー元ファイル (full path)
235 public boolean copyFile(String destFileName, String srcFileName)
241 InputStream is = null;
242 OutputStream os = null;
244 if (destFileName == srcFileName)
246 // ファイル名が同じだった場合にはコピーを実行しない
252 srcFile = new File(srcFileName);
253 if (srcFile.exists() != true)
255 // ファイルが存在しなかった、、、終了する
258 is = new FileInputStream(srcFile);
260 long dataFileSize = srcFile.length();
261 byte[] buffer = new byte[COPY_BUFFER_SIZE + BUFFER_MARGIN];
263 dstFile = new File(destFileName);
264 if (dstFile.exists() == true)
266 // ファイルが存在した、、、削除して作り直す
270 os = new FileOutputStream(dstFile);
271 if ((is != null)&&(os != null))
273 while (dataFileSize > 0)
275 int size = is.read(buffer, 0, COPY_BUFFER_SIZE);
280 os.write(buffer, 0, size);