hch
2024-04-01 2af4b92997143d33f41d15160f2a152f334ea59b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
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);
    }
}