|  |  |  | 
|---|
|  |  |  | 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<String, Object> _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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 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<String, Object> _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("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/config"); | 
|---|
|  |  |  | if (_fileNames != null) { | 
|---|
|  |  |  | for (String _fileName : _fileNames) { | 
|---|
|  |  |  | copy("android/config" + File.separator + _fileName, | 
|---|
|  |  |  | _dest + File.separator + _fileName); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | LogUtil.i("copyAssets", "全部拷贝完成," + "currentVer:" + currentVer); | 
|---|
|  |  |  | // 存储此次的拷贝版本 | 
|---|
|  |  |  | SPUtils.get().edit().putLong("configsversion", currentVer).apply(); | 
|---|
|  |  |  | Map<String, Object> _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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|