package com.secondworld.universalsdk;
|
|
import android.app.Activity;
|
import android.content.Context;
|
import android.content.SharedPreferences;
|
import android.content.res.AssetManager;
|
|
import java.io.File;
|
import java.io.FileOutputStream;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.OutputStreamWriter;
|
import java.io.Writer;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
/**
|
* Created by Administrator on 2018/6/14 0014.
|
*/
|
|
public class FileUtil
|
{
|
|
private static final String TAG = "H2Engine_FileUtil";
|
|
/**
|
* Unity随包资源(StreamingAssets)拷贝至 persistentDataPath 路径下
|
*/
|
public static void copyAssets(final Activity activity)
|
{
|
|
// 判断是否已经执行过
|
SharedPreferences _sp = activity.getPreferences(Context.MODE_PRIVATE);
|
Boolean _isCopied = hasCopy(activity);
|
|
LogUtil.i(TAG, "是否已经执行过拷贝逻辑: " + _isCopied);
|
|
// 获取当前包的版本号
|
final String _currentVer = UniversalUtil.GetVersionName(activity);
|
|
// 已经拷贝过, 则再次判断一次版本号
|
// 如果版本号不相同, 则重新进行拷贝
|
// 获取本地存储的版本号
|
String _installVer = _sp.getString(StaticDefine.LS_KEY_VERSION, "");
|
|
if (!_installVer.equals(_currentVer))
|
{
|
LogUtil.i(TAG, "版本比较过后发现不同: " + _installVer + " != " + _currentVer);
|
SharedPreferences.Editor _editor = _sp.edit();
|
// 存储此次的版本信息
|
_editor.putString(StaticDefine.LS_KEY_VERSION, _currentVer);
|
_editor.apply();
|
|
if (_isCopied)
|
{
|
// 将本地存储修改为未拷贝过
|
deleteRecord(activity);
|
_isCopied = false;
|
}
|
}
|
|
if (_isCopied)
|
{
|
Map<String, Object> _msg = new HashMap<>();
|
_msg.put("code", CodeA2U.AssetCopyFinished);
|
UniversalUtil.sendMessageToUnity(_msg);
|
return;
|
}
|
|
new Thread(new Runnable()
|
{
|
@Override
|
public void run()
|
{
|
|
String _dest = activity.getExternalFilesDir("").getAbsolutePath();
|
AssetManager _assetMgr = activity.getAssets();
|
|
try
|
{
|
|
String[] _fileNames = _assetMgr.list("android");
|
if (_fileNames != null)
|
{
|
for (String _fileName : _fileNames)
|
{
|
copy(activity, "android" + File.separator + _fileName,
|
_dest + File.separator + _fileName);
|
}
|
}
|
|
recordCopy(activity);
|
|
Map<String, Object> _msg = new HashMap<>();
|
_msg.put("code", CodeA2U.AssetCopyFinished);
|
UniversalUtil.sendMessageToUnity(_msg);
|
|
} catch (Exception e)
|
{
|
e.printStackTrace();
|
}
|
|
}
|
}).start();
|
}
|
|
public static void copy(Context context, String fileName)
|
{
|
String _originalPath = "android" + File.separator + fileName;
|
String _destPath = context.getExternalFilesDir(
|
"").getAbsolutePath() + File.separator + fileName;
|
String _destDir = _destPath.substring(0, _destPath.lastIndexOf('/') + 1);
|
File _file = new File(_destDir);
|
if(!_file.exists())
|
{
|
LogUtil.i(TAG,"单独拷贝 => 不存在指定路径: " + _destDir + ", 这里创建...");
|
_file.mkdir();
|
}
|
try
|
{
|
InputStream _is = context.getAssets().open(_originalPath);
|
FileOutputStream _fos = new FileOutputStream(new File(_destPath));
|
byte[] _buffer = new byte[1024];
|
int _byteCount;
|
while ((_byteCount = _is.read(_buffer)) != -1)
|
{
|
_fos.write(_buffer, 0, _byteCount);
|
}
|
_fos.flush();
|
_is.close();
|
_fos.close();
|
LogUtil.i("FileUtil", "单独拷贝 => 文件: " + _originalPath + " 已拷贝至: " + _destPath);
|
} catch (Exception e)
|
{
|
e.printStackTrace();
|
}
|
}
|
|
public static void copy(Context context, String original, String dest)
|
{
|
try
|
{
|
String _fileNames[] = context.getAssets().list(original);
|
if (_fileNames.length > 0)
|
{
|
File _dir = new File(dest);
|
_dir.mkdir();
|
LogUtil.i("FileUtil", "[" + original + "] 是一个文件夹, 创建文件夹: [" + dest + "]");
|
for (String _fileName : _fileNames)
|
{
|
copy(context, original + File.separator + _fileName,
|
dest + File.separator + _fileName);
|
}
|
}
|
else
|
{
|
InputStream _is = context.getAssets().open(original);
|
FileOutputStream _fos = new FileOutputStream(new File(dest));
|
byte[] _buffer = new byte[1024];
|
int _byteCount;
|
while ((_byteCount = _is.read(_buffer)) != -1)
|
{
|
_fos.write(_buffer, 0, _byteCount);
|
}
|
_fos.flush();
|
_is.close();
|
_fos.close();
|
LogUtil.i("FileUtil", "文件: " + original + " 已拷贝至: " + dest);
|
}
|
} catch (Exception e)
|
{
|
e.printStackTrace();
|
}
|
}
|
|
public static String getFileNameWithoutExtension(String fileName)
|
{
|
return fileName.substring(0, fileName.lastIndexOf("."));
|
}
|
|
private static boolean hasCopy(Context context)
|
{
|
File _file = new File(context.getExternalFilesDir(""), "/assetCopyFinish.txt");
|
return _file.exists();
|
}
|
|
private static void deleteRecord(Context context)
|
{
|
File _file = new File(context.getExternalFilesDir(""), "/assetCopyFinish.txt");
|
if (_file.exists())
|
{
|
_file.delete();
|
}
|
}
|
|
private static void recordCopy(Context context)
|
{
|
File _file = new File(context.getExternalFilesDir(""), "/assetCopyFinish.txt");
|
try
|
{
|
FileOutputStream _fos = new FileOutputStream(_file);
|
Writer _writer = new OutputStreamWriter(_fos, "UTF-8");
|
_writer.write(1);
|
_writer.close();
|
_fos.close();
|
} catch (IOException e)
|
{
|
e.printStackTrace();
|
}
|
}
|
}
|