package com.secondworld.sdk.utils; import android.content.res.AssetManager; import com.secondworld.sdk.GameAppProxy; import com.secondworld.sdk.UnityMsgHandler; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.util.HashMap; import java.util.Map; /** * Created by Administrator on 2018/6/14 0014. */ public class FileUtil { /** * Unity随包资源批量拷贝 */ public static void copyAssets() { // 获取当前包的版本号 final long currentVer = DeviceUtil.getVersionCode(); // 已经拷贝过, 则再次判断一次版本号 // 如果版本号不相同, 则重新进行拷贝 // 获取本地存储的版本号 long installVer = SPUtils.get().getLong(SPUtils.LAST_COPY_VERSION, 0); if (installVer == currentVer) { LogUtil.i("copyAssets", "已拷贝过,installVer:" + installVer + ";" + "currentVer:" + currentVer); UnityMsgHandler.sendMessageToUnity(CodeA2U.AssetCopyFinished); return; } String _dest = GameAppProxy.app.getExternalFilesDir("").getAbsolutePath(); AssetManager _assetMgr = GameAppProxy.app.getAssets(); try { String[] _fileNames = _assetMgr.list("android"); if (_fileNames != null) { for (String _fileName : _fileNames) { copy("android" + File.separator + _fileName, _dest + File.separator + _fileName); } } LogUtil.i("copyAssets", "全部拷贝完成," + "currentVer:" + currentVer); // 存储此次的拷贝版本 SPUtils.get().edit().putLong(SPUtils.LAST_COPY_VERSION, currentVer).apply(); Map _msg = new HashMap<>(); UnityMsgHandler.sendMessageToUnity(CodeA2U.AssetCopyFinished); } catch (Exception e) { e.printStackTrace(); } } public static void copyConfigs() { // 获取当前包的版本号 final long currentVer = DeviceUtil.getVersionCode(); // 已经拷贝过, 则再次判断一次版本号 // 如果版本号不相同, 则重新进行拷贝 // 获取本地存储的版本号 long installVer = SPUtils.get().getLong("configsversion", 0); if (installVer == currentVer) { LogUtil.i("copyConfigs", "已拷贝过,installVer:" + installVer + ";" + "currentVer:" + currentVer); UnityMsgHandler.sendMessageToUnity(CodeA2U.AssetCopyFinished); return; } String _dest = GameAppProxy.app.getExternalFilesDir("").getAbsolutePath() + File.separator + "config"; File _file = new File(_dest); if (!_file.exists()) { boolean mkdir = _file.mkdir(); } AssetManager _assetMgr = GameAppProxy.app.getAssets(); try { String[] _fileNames = _assetMgr.list("android/config"); if (_fileNames != null) { for (String _fileName : _fileNames) { copy("android/config" + File.separator + _fileName, _dest + File.separator + _fileName); } } LogUtil.i("copyConfigs", "全部拷贝完成," + "currentVer:" + currentVer); // 存储此次的拷贝版本 SPUtils.get().edit().putLong("configsversion", currentVer).apply(); Map _msg = new HashMap<>(); UnityMsgHandler.sendMessageToUnity(CodeA2U.AssetCopyFinished); } catch (Exception e) { e.printStackTrace(); } } /** * unity单个资源拷贝 * * @param fileName */ public static void copyOneAsset(String fileName) { String originalPath = "android" + File.separator + fileName; String destPath = GameAppProxy.app.getExternalFilesDir( "").getAbsolutePath() + File.separator + fileName; String _destDir = destPath.substring(0, destPath.lastIndexOf('/') + 1); File _file = new File(_destDir); if (!_file.exists()) { boolean mkdir = _file.mkdir(); } try { InputStream _is = GameAppProxy.app.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(); } catch (Exception e) { e.printStackTrace(); } } public static void copy(String original, String dest) { try { String[] fileNames = GameAppProxy.app.getAssets().list(original); if (fileNames.length > 0) { File dir = new File(dest); String mkdir = dir.mkdir() ? "成功" : "失败"; LogUtil.i("copyAssets", "[" + original + "] 是一个文件夹, 创建文件夹: [" + dest + "] " + mkdir); for (String _fileName : fileNames) { copy(original + File.separator + _fileName, dest + File.separator + _fileName); } } else { InputStream _is = GameAppProxy.app.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("copyAssets", "文件: " + original + " 已拷贝至: " + dest); } } catch (Exception e) { e.printStackTrace(); } } public static String getFileNameWithoutExtension(String fileName) { return fileName.substring(0, fileName.lastIndexOf(".")); } /** * 获取文件后缀名 */ public static String getSuffixName(File file) { String fileName = file.getName(); int index = fileName.lastIndexOf("."); if (index == -1) return ""; return fileName.substring(index + 1); } }