package mobi.monaca.framework.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.ArrayList;
import mobi.monaca.framework.bootloader.AbortException;
import mobi.monaca.framework.bootloader.LocalFileBootloader;
import android.content.Context;
public class AssetUtils {
private static final String TAG = AssetUtils.class.getSimpleName();
public static boolean existsAsset(Context context, String assetPath) {
try {
InputStream stream = LocalFileBootloader.openAsset(context, assetPath);
stream.close();
return true;
} catch (Exception e) {
return false;
}
}
public static String assetToString(Context context, String assetName) throws IOException {
InputStream in = LocalFileBootloader.openAsset(context, assetName);
BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"/* 文字コード指定 */));
StringBuffer buf = new StringBuffer();
String str;
while ((str = reader.readLine()) != null) {
buf.append(str);
buf.append("\n");
}
return buf.toString();
}
protected void aggregateAssetsFileList(Context context, String prefix, ArrayList<String> result) {
try {
for (String path : context.getAssets().list(prefix)) {
MyLog.d(TAG, "pathCheck :" + prefix + "/" + path);
if (existsAsset(context, prefix + "/" + path)) {
result.add(prefix + "/" + path);
} else {
// may be directory
aggregateAssetsFileList(context, prefix + "/" + path, result);
}
}
} catch (Exception e) {
MyLog.e(getClass().getSimpleName(), e.getMessage());
throw new RuntimeException(e);
}
}
protected void copyAssetToLocal(Context context, String assetPath) {
MyLog.d(TAG, "copyAssetToLocal()");
byte[] buffer = new byte[1024 * 4];
File file = new File(context.getApplicationInfo().dataDir + "/" + assetPath);
file.getParentFile().mkdirs();
try {
OutputStream output = new FileOutputStream(file);
InputStream input = context.getAssets().open(assetPath);
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
}
input.close();
output.close();
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new AbortException(e);
}
}
}