フォルダ構成がさっぱりわからなかった。
●カレントディレクトリのパスを取得する
System.getProperty("user.dir");
※返ってきた値は / のみ
●カレントディレクトリのファイル一覧を取得する
File[] files;
String sdPath = System.getProperty("user.dir");
files = new File(sdPath).listFiles();
●返ってきたファイル一覧
[0] = {java.io.File@3741}"/sdcard"
[1] = {java.io.File@3742}"/storage"
[2] = {java.io.File@3743}"/config"
[3] = {java.io.File@3744}"/cache"
[4] = {java.io.File@3745}"/acct"
[5] = {java.io.File@3746}"/vendor"
[6] = {java.io.File@3747}"/d"
[7] = {java.io.File@3748}"/etc"
[8] = {java.io.File@3749}"/mnt"
[9] = {java.io.File@3750}"/ueventd.rc"
[10] = {java.io.File@3751}"/ueventd.goldfish.rc"
[11] = {java.io.File@3752}"/system"
[12] = {java.io.File@3753}"/sys"
[13] = {java.io.File@3754}"/service_contexts"
[14] = {java.io.File@3755}"/sepolicy"
[15] = {java.io.File@3756}"/selinux_version"
[16] = {java.io.File@3757}"/seapp_contexts"
[17] = {java.io.File@3758}"/sbin"
[18] = {java.io.File@3759}"/property_contexts"
[19] = {java.io.File@3760}"/proc"
[20] = {java.io.File@3761}"/init.zygote32.rc"
[21] = {java.io.File@3762}"/init.usb.rc"
[22] = {java.io.File@3763}"/init.trace.rc"
[23] = {java.io.File@3764}"/init.rc"
[24] = {java.io.File@3765}"/init.goldfish.rc"
[25] = {java.io.File@3766}"/init.environ.rc"
[26] = {java.io.File@3767}"/init"
[27] = {java.io.File@3768}"/fstab.goldfish"
[28] = {java.io.File@3769}"/file_contexts"
[29] = {java.io.File@3770}"/default.prop"
[30] = {java.io.File@3771}"/data"
[31] = {java.io.File@3772}"/charger"
[32] = {java.io.File@3773}"/root"
[33] = {java.io.File@3774}"/dev"
これはっ!Android Device Monitorで見たフォルダ構成ような
●Android Device Monitorの表示方法
Android Studio上で [Tools]->[Android]->[Android Device Monitor]
●Android Device Monitor上のFile Explorer内のフォルダ構成
●Androidでは書き込み可能フォルダがあるとの事(全然知らなかった)
下記参考にしました。(すごく助かりました)
http://kujirahand.com/blog/index.php?Androidでファイル出力に失敗する原因
http://www.adamrocker.com/blog/196/android_file_io.html
・SDカード
/sdcard/xxx
・データフォルダ
/data/data/パッケージ名/xxx
・パッケージ名の取得方法
this.getPackageName()
●AndroidでZipファイルの解凍・展開
下記参考にしました。(すごく助かりました)
http://dev.classmethod.jp/smartphone/android/android-tips-46-zipinputstream/
http://techbooster.org/android/application/15261/
●呼び元(解凍するファイルパスを指定)
extract("/data/myAssetBundle.zip");
●呼び先(ファイルパスを元にZipを展開する)
public void extract(String filename)
{
try {
Toast.makeText(getBaseContext(), "Try Start", Toast.LENGTH_LONG).show();
// Zipファイルを開く
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(filename));
ZipFile zipFile = new ZipFile(filename);
// 順番に読み込む
ZipEntry entry = null;
while((entry = zipInputStream.getNextEntry()) != null) {
// Listで表示するアイテム
// データのコピー
InputStream is = zipFile.getInputStream(entry);
// データフォルダを書き込み先に指定
String outputPath = "/data/data/" + this.getPackageName() + "/" + entry.getName();
File outputFile = new File(outputPath);
FileOutputStream os = new FileOutputStream(outputFile);
byte[] buffer = new byte[1024];
int length = 0;
while ((length = is.read(buffer))>0) {
os.write(buffer, 0, length);
}
os.close();
is.close();
zipInputStream.closeEntry();
}
zipInputStream.close();
Toast.makeText(getBaseContext(), "Try End", Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
●実際にUnityのプラグインとして使用する時
// プラグイン名をパッケージ名+クラス名で指定する。
AndroidJavaObject m_plugin = new AndroidJavaObject("com.test.miyaactivityzip.MiyaGetCachePath");
package com.test.miyaactivityzip;
import android.app.Activity;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import android.util.Log;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
public class MiyaGetCachePath {
public void ZipRelease()
{
ZipInputStream in = null;
BufferedOutputStream out = null;
ZipEntry zipEntry = null;
int len = 0;
try {
final Activity activity = UnityPlayer.currentActivity;
File inFile = new File(activity.getCacheDir().toString() + "/test.zip");
in = new ZipInputStream(new FileInputStream(inFile));
// test.zip が表示される
Log.d("filename=", inFile.getName());
// ZIPファイルに含まれるエントリに対して順にアクセス
while ((zipEntry = in.getNextEntry()) != null)
{
// Unity側で変更された名前ではなく 実際のzip名/中のファイル名 testtext/1.txt
Log.d("zipEntry.getName=", zipEntry.getName());
File newfile = new File(zipEntry.getName());
// Unity側で変更された名前ではなく 実際の中のファイル名 1.txt
Log.d("newfile.getName=", newfile.getName());
boolean isExists = newfile.exists();
Log.d("isExists=", String.valueOf(isExists));
// /data/data/com.test.miyaactivityzip/cache
Log.d("getCacheDir=", activity.getCacheDir().toString());
// 出力用ファイルストリームの生成
out = new BufferedOutputStream(
new FileOutputStream(activity.getCacheDir().toString() + "/" + newfile.getName())
);
// エントリの内容を出力
byte[] buffer = new byte[1024];
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
in.closeEntry();
out.close();
out = null;
}
in.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}