hch
2025-07-02 e8d63e91d80cc59d7947ad026149c2b752ce9364
SdkProject/library/src/main/java/com/secondworld/sdk/utils/FileUtil.java
@@ -1,136 +1,175 @@
package com.secondworld.sdk.utils;
import android.content.res.AssetManager;
import com.secondworld.sdk.GameApp;
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);
            Map<String, Object> _msg = new HashMap<>();
            _msg.put("code", CodeA2U.AssetCopyFinished);
            UnityMsgHandler.sendMessageToUnity(_msg);
            return;
        }
        String _dest = GameApp.I.getExternalFilesDir("").getAbsolutePath();
        AssetManager _assetMgr = GameApp.I.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<>();
            _msg.put("code", CodeA2U.AssetCopyFinished);
            UnityMsgHandler.sendMessageToUnity(_msg);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * unity单个资源拷贝
     *
     * @param fileName
     */
    public static void copyOneAsset(String fileName) {
        String originalPath = "android" + File.separator + fileName;
        String destPath = GameApp.I.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 = GameApp.I.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 = GameApp.I.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 = GameApp.I.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("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<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);
    }
}