From cdf49871675e42a5576f725a93eec7ca15294c6f Mon Sep 17 00:00:00 2001 From: wjc <1243177876@qq.com> Date: 星期二, 15 四月 2025 17:22:34 +0800 Subject: [PATCH] Merge branch '1.5.2' --- app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java | 589 +++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 512 insertions(+), 77 deletions(-) diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java index a4454fe..c476bb2 100644 --- a/app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java +++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java @@ -1,22 +1,47 @@ package com.hdl.photovoltaic.other; +import android.content.Context; +import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.util.Log; +import android.os.Environment; +import android.text.TextUtils; import com.hdl.photovoltaic.HDLApp; +import com.hdl.photovoltaic.config.ConstantManage; +import com.hdl.photovoltaic.config.UserConfigManage; +import com.hdl.photovoltaic.utils.LocalManageUtil; + +import org.apache.commons.io.FileUtils; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; +import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Objects; +/** + * 鏂囦欢鎿嶄綔鐨勯�昏緫 + */ public class HdlFileLogic { private static volatile HdlFileLogic sHdlFileLogic; + /** + * 琛ㄧず0.5m澶у皬鏁版嵁 + */ + private final double mDataSize = 0.5; + + /** + * 鑾峰彇褰撳墠瀵硅薄 + * + * @return HdlFileLogic + */ public static synchronized HdlFileLogic getInstance() { if (sHdlFileLogic == null) { synchronized (HdlFileLogic.class) { @@ -31,122 +56,531 @@ private static final String TAG = "FileUtils"; - public static final String userId = ""; + private String getUserId() { + return UserConfigManage.getInstance().getUserId(); + } + + private String getHomeId() { + return UserConfigManage.getInstance().getHomeId(); + } + //region ---------root璺緞----------- /** - * 鑾峰彇鍐呴儴瀛樺偍鏂囦欢璺緞 + * 鑾峰彇鎵嬫満鍐呴儴瀛樺偍鏂囦欢璺緞 */ - private String getInternalStoreFilesPath() { - return HDLApp.getInstance().getFilesDir().getAbsolutePath(); + public String getAPPInternalStoreFilesPath() { + return Objects.requireNonNull(HDLApp.getInstance().getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS)).getPath(); } /** - * 鑾峰彇App瀛樻斁鏂囦欢鐨勬牴璺緞 + * 鑾峰彇瀛樻斁銆愮敤鎴锋枃浠跺す銆戞牴璺緞 */ - public String getAppFilesPath() { - return HDLApp.getInstance().getFilesDir().getAbsolutePath() + userId + "/home"; + public String getCurrentUserRootPath() { + return getAPPInternalStoreFilesPath() + "/" + getUserId(); } - public File createFile(String dirPath, String fileName) { + /** + * 鑾峰彇瀛樻斁銆愪綇瀹呮枃浠跺す銆戞牴璺緞 + */ + public String getCurrentHomeRootPath() { + return getCurrentUserRootPath() + "/" + "home_" + getHomeId(); + } + + /** + * 鑾峰彇瀛樻斁銆愰┍鍔ㄦ枃浠跺す銆戞牴璺緞 + */ + public String getDriveRootPath() { + return getAPPInternalStoreFilesPath() + "/upgrade/drive"; + } + + + /** + * 鑾峰彇瀛樻斁銆愬浐浠舵枃浠跺す銆戞牴璺緞 + */ + public String getFirmwareRootPath() { + return getAPPInternalStoreFilesPath() + "/upgrade/firmware"; + } + + /** + * 鑾峰彇涓枃銆恓son璧勬簮鏂囦欢澶广�戝叏璺緞 + * + * @param deviceModel 璁惧鍨嬪彿 + */ + public String getHdlESLocalJsonZhRootPath(String deviceModel) { + return getAPPInternalStoreFilesPath() + "/hdlESLocalJson/" + LocalManageUtil.zh + "/" + deviceModel; + } + + /** + * 鑾峰彇鑻辨枃銆恓son璧勬簮鏂囦欢澶广�戝叏璺緞 + * + * @param deviceModel 璁惧鍨嬪彿 + */ + public String getHdlESLocalJsonEnRootPath(String deviceModel) { + return getAPPInternalStoreFilesPath() + "/hdlESLocalJson/" + LocalManageUtil.en + "/" + deviceModel; + } + + + /** + * 鑾峰彇銆愭棩蹇楁枃浠躲�戝叏璺緞 + */ + public String getLogFileNamePath() { + return getCurrentHomeRootPath() + "/log.txt"; + } + + + /** + * 鑾峰彇銆愮敤鎴锋枃浠躲�戝叏璺緞 + */ + public String getUserFilePath() { + return getAPPInternalStoreFilesPath() + "/userConfigManage.txt"; + } + + /** + * 鑾峰彇涓枃銆恓son璧勬簮鏂囦欢銆戝叏璺緞 + */ + public String getHdlESLocalJsonZhFilePath(String deviceModel, String fileName) { + if (!fileName.endsWith(".json")) { + fileName += ".json"; + } + return getAPPInternalStoreFilesPath() + "/hdlESLocalJson/" + LocalManageUtil.zh + "/" + deviceModel + "/" + fileName; + } + + /** + * 鑾峰彇鑻辨枃銆恓son璧勬簮鏂囦欢銆戝叏璺緞 + */ + public String getHdlESLocalJsonEnFilePath(String deviceModel, String fileName) { + if (!fileName.endsWith(".json")) { + fileName += ".json"; + } + return getAPPInternalStoreFilesPath() + "/hdlESLocalJson/" + LocalManageUtil.en + "/" + deviceModel + "/" + fileName; + } + + + /** + * 鑾峰彇椹卞姩鍗囩骇鏂囦欢鍏ㄨ矾寰� + * + * @param driverCode 椹卞姩缂栫爜 + * @param version 椹卞姩鐗堟湰 + * @return 鍏ㄨ矾寰� + */ + public String getDrivePathFileName(String driverCode, String version) { + String fileName = driverCode + "_" + version + ".zip"; + return HdlFileLogic.getInstance().getDriveRootPath() + "/" + fileName; + } + + /** + * 鑾峰彇鍥轰欢鍗囩骇鏂囦欢鍏ㄨ矾寰� + * + * @param imageId 闀滃儚id + * @param version 椹卞姩鐗堟湰 + * @return 鍏ㄨ矾寰� + */ + public String getFirmwarePathFileName(String imageId, String version) { + String fileName = imageId + "_" + version + ".zip"; + return HdlFileLogic.getInstance().getFirmwareRootPath() + "/" + fileName; + } + + //endregion + + //region ---------銆愭枃浠跺す銆戞搷浣�----------- + + /** + * 棰勫垱寤烘枃浠跺す + */ + public void createDirectory() { + //瀛樻斁浣忓畢淇℃伅 + this.createFileDir(this.getCurrentHomeRootPath()); + //椹卞姩鏂囦欢 + this.createFileDir(this.getDriveRootPath()); + //鍥轰欢鏂囦欢 + this.createFileDir(this.getFirmwareRootPath()); + + } + + /** + * 棰勫垱寤簀son璧勬簮鏂囦欢澶� + */ + public void createHdlESLocalJsonDirectory() { + //涓枃鏂囦欢澶� + + this.createFileDir(this.getHdlESLocalJsonZhRootPath(HdlESLocalJsonLogic.DeviceModel.INV));//閫嗗彉鍣� + this.createFileDir(this.getHdlESLocalJsonZhRootPath(HdlESLocalJsonLogic.DeviceModel.LC));//璐熻浇涓績 + this.createFileDir(this.getHdlESLocalJsonZhRootPath(HdlESLocalJsonLogic.DeviceModel.INV_BMS));//BMS + this.createFileDir(this.getHdlESLocalJsonZhRootPath(HdlESLocalJsonLogic.DeviceModel.INV_BATTERY));//鐢垫睜鍖� + //绂荤嚎閫嗗彉鍣� + this.createFileDir(this.getHdlESLocalJsonZhRootPath(HdlESLocalJsonLogic.DeviceModel.OFF_INV));//绂荤嚎閫嗗彉鍣� + this.createFileDir(this.getHdlESLocalJsonZhRootPath(HdlESLocalJsonLogic.DeviceModel.OFF_INV_BMS));//绂荤綉閫嗗彉鍣ㄨ櫄鎷烞MS + this.createFileDir(this.getHdlESLocalJsonZhRootPath(HdlESLocalJsonLogic.DeviceModel.OFF_INV_BATTERY));//绂荤綉閫嗗彉鍣ㄧ數姹犲寘 + + + //鑻辨枃鏂囦欢澶� + this.createFileDir(this.getHdlESLocalJsonEnRootPath(HdlESLocalJsonLogic.DeviceModel.INV)); + this.createFileDir(this.getHdlESLocalJsonEnRootPath(HdlESLocalJsonLogic.DeviceModel.LC)); + this.createFileDir(this.getHdlESLocalJsonEnRootPath(HdlESLocalJsonLogic.DeviceModel.INV_BMS)); + this.createFileDir(this.getHdlESLocalJsonEnRootPath(HdlESLocalJsonLogic.DeviceModel.INV_BATTERY)); + //绂荤嚎閫嗗彉鍣� + this.createFileDir(this.getHdlESLocalJsonEnRootPath(HdlESLocalJsonLogic.DeviceModel.OFF_INV));//绂荤嚎閫嗗彉鍣� + this.createFileDir(this.getHdlESLocalJsonEnRootPath(HdlESLocalJsonLogic.DeviceModel.OFF_INV_BMS));//绂荤綉閫嗗彉鍣ㄨ櫄鎷烞MS + this.createFileDir(this.getHdlESLocalJsonEnRootPath(HdlESLocalJsonLogic.DeviceModel.OFF_INV_BATTERY));//绂荤綉閫嗗彉鍣ㄧ數姹犲寘 + + } + + /** + * 鍒涘缓鏂囦欢澶� + * + * @param fullPath fullPath 鍏ㄨ矾寰� + * @return - + */ + public boolean createFileDir(String fullPath) { try { - File dirFile = new File(dirPath); - if (!dirFile.exists()) { - if (!createFileDir(dirFile)) { - HdlLogLogic.print(TAG, "createFile dirFile.mkdirs fail"); - return null; - } - } else if (!dirFile.isDirectory()) { - boolean delete = dirFile.delete(); - if (delete) { - return createFile(dirPath, fileName); - } else { - HdlLogLogic.print(TAG, "createFile dirFile !isDirectory and delete fail"); - return null; - } + File file = new File(fullPath); + if (!file.isDirectory()) { + boolean succeed = file.mkdirs(); + System.out.println("鍒涘缓鏂囦欢澶硅矾寰�---" + file.getAbsolutePath() + "===鍒涘缓鏂囦欢澶圭粨鏋�---" + succeed); + return succeed; } - File file = new File(dirPath, fileName); - if (!file.exists()) { - if (!file.createNewFile()) { - Log.e(TAG, "createFile createNewFile fail"); - return null; - } - } - return file; + return true; } catch (Exception e) { - HdlLogLogic.print(TAG, "createFile fail :" + e.getMessage()); - e.printStackTrace(); - return null; + System.out.println("鍒涘缓鏂囦欢澶规湁寮傚父===" + e.getMessage()); + return false; + } + } + + + /** + * 鍒犻櫎鏂囦欢澶� + * + * @param fullPath 鍏ㄨ矾寰� + */ + public void deleteDirectory(String fullPath) { + try { + File fileRoot = new File(fullPath); + if (fileRoot.isDirectory()) { + File[] listFiles = fileRoot.listFiles(); + if (listFiles != null) { + for (File file : listFiles) { + if (file.isDirectory()) { + deleteDirectory(file.getAbsolutePath()); + } else { + this.deleteFile(file.getAbsolutePath()); + } + } + } + } + // 鍒犻櫎鏂囦欢澶规湰韬� + boolean succeed = fileRoot.delete();//鏂囦欢澶圭┖杩欎釜鏂规硶鎵嶆湁鏁� + System.out.println("鍒犻櫎鏂囦欢澶硅矾寰�---" + fileRoot.getAbsolutePath() + "===鍒犻櫎缁撴灉---" + succeed); + } catch (Exception e) { + System.out.println("鍒犻櫎鏂囦欢澶规湁寮傚父===" + e.getMessage()); + } + + } + + + //endregion + + //region ---------銆愭枃浠躲�戞搷浣�----------- + + /** + * 鍒涘缓鏂囦欢 + * + * @param fullPath 鍏ㄨ矾寰� + * @return - + */ + public boolean createFile(String fullPath) { + try { + File file = new File(fullPath); + if (!file.exists()) { + boolean succeed = file.createNewFile(); + System.out.println("鍒涘缓鏂囦欢璺緞---" + file.getAbsolutePath() + "===鍒涘缓鏂囦欢缁撴灉---" + succeed); + return succeed; + } + return true; + } catch (Exception e) { + System.out.println("鍒涘缓鏂囦欢鏈夊紓甯�===" + e.getMessage()); + return false; } } /** - * 鍒涘缓鏂囦欢澶�---涔嬫墍浠ヨ涓�灞傚眰鍒涘缓锛屾槸鍥犱负涓�娆℃�у垱寤哄灞傛枃浠跺す鍙兘浼氬け璐ワ紒 + * 鍒犻櫎鏂囦欢 + * + * @param fullPath 鍏ㄨ矾寰� + * @return - */ - public boolean createFileDir(File dirFile) { - if (dirFile == null) { - return true; - } - if (dirFile.exists()) { - return true; - } - File parentFile = dirFile.getParentFile(); - if (parentFile != null && !parentFile.exists()) { - //鐖舵枃浠跺す涓嶅瓨鍦紝鍒欏厛鍒涘缓鐖舵枃浠跺す锛屽啀鍒涘缓鑷韩鏂囦欢澶� - return createFileDir(parentFile) && createFileDir(dirFile); - } else { - boolean mkdirs = dirFile.mkdirs(); - boolean isSuccess = mkdirs || dirFile.exists(); - if (!isSuccess) { - Log.e("FileUtil", "createFileDir fail " + dirFile); + public boolean deleteFile(String fullPath) { + try { + File file = new File(fullPath); + if (file.exists()) { + boolean succeed = file.delete(); + System.out.println("鍒犻櫎鏂囦欢---" + fullPath + "===缁撴灉---" + succeed); + return succeed; } - return isSuccess; + return true; + } catch (Exception e) { + System.out.println("鍒犻櫎鏂囦欢鏈夊紓甯�===" + e.getMessage()); + return false; } + } - public void writeFile(String path, String data) { + + /** + * 鍐欏叆鏂囦欢 + * + * @param fullPath 鍏ㄨ矾寰� + * @param data 鏁版嵁 + */ + public void writeFile(String fullPath, byte[] data) { try { - File file = new File(path); + File file = new File(fullPath); if (!file.exists()) { - if (!file.mkdir() && !file.isDirectory()) { - HdlLogLogic.print(TAG, "Error: make dir failed!"); + if (!createFile(fullPath)) { + //鍒涘缓澶辫触鐩存帴杩斿洖 return; } } FileOutputStream d = new FileOutputStream(file); - d.write(data.getBytes()); + d.write(data); d.flush(); d.close(); - } catch (IOException e) { - e.printStackTrace(); + System.out.println("鍐欏叆鏂囦欢鎴愬姛---" + fullPath); + } catch (Exception e) { + System.out.println("鍐欏叆鏂囦欢鏈夊紓甯�---" + e.getMessage()); } } - public String readFile(String filepath) { - try { - String fileContent = ""; - if (null == filepath) { - Log.d(TAG, "Error: Invalid file name!"); - return fileContent; - } + /** + * 鍐欏叆鏂囦欢 + * + * @param fullPath 鍏ㄨ矾寰� + * @param data 鏁版嵁 + */ + public void writeFile(String fullPath, String data) { + writeFile(fullPath, data.getBytes()); + } - File f = new File(filepath); + /** + * 鍐欏叆鏂囦欢(涓�琛屼竴琛岃拷鍔犲唴瀹�) + * + * @param fullPath 鍏ㄨ矾寰� + * @param dataLine 鏁版嵁 + */ + public void appendFile(String fullPath, String dataLine) { + try { + if (!isBoolean(fullPath)) { + return; + } + File file = new File(fullPath); + if (!file.exists()) { + if (!createFile(fullPath)) { + //鍒涘缓澶辫触鐩存帴杩斿洖 + return; + } + } + FileOutputStream d = new FileOutputStream(file, true); + d.write(dataLine.getBytes()); + d.write("\r\n".getBytes());// 鍐欏叆涓�涓崲琛� + d.flush(); + d.close(); + if (file.length() > 1024 * 1024 * mDataSize) { + //鏂囦欢澶т簬1m,鍒犻櫎鏂囦欢鍓�100鏉℃棩蹇� + this.delFileLien(fullPath, 100); + } +// System.out.println("鍐欏叆涓�琛屾暟鎹埌鏂囦欢鎴愬姛---" + dataLine); + } catch (Exception e) { + System.out.println("鍐欏叆涓�琛屾暟鎹埌鏂囦欢鏈夊紓甯�---" + e.getMessage()); + } + + } + + /** + * 璇诲彇鏂囦欢 + * + * @param filePath 鍏ㄨ矾寰� + * @return 鏁版嵁 + */ + public byte[] readFileByte1(String filePath) { + try { + if (!isBoolean(filePath)) { + return null; + } + File f = new File(filePath); if (!f.exists()) { - return fileContent; + return null; } FileInputStream fis = new FileInputStream(f); - byte[] bytes = new byte[fis.available()]; - fis.read(bytes); + byte[] bytes = FileUtils.readFileToByteArray(f);//杩欎釜鏂规硶涓嶅吋鐢╝ndroid 6.0 fis.close(); - fileContent = new String(bytes); - return fileContent; + System.out.println("璇诲彇鏂囦欢鎴愬姛---" + filePath); + return bytes; } catch (Exception e1) { - e1.printStackTrace(); - Log.d(TAG, "Error: Input File not find!"); + System.out.println("璇诲彇鏂囦欢鏈夊紓甯�---" + e1.getMessage()); + return null; + } + + } + + + /** + * 璇诲彇鏂囦欢 + * + * @param filePath 鍏ㄨ矾寰� + * @return 鏁版嵁 + */ + public byte[] readFileByte(String filePath) { + try { + if (!isBoolean(filePath)) { + return null; + } + File f = new File(filePath); + if (!f.exists()) { + return null; + } + FileInputStream fis = new FileInputStream(f); + BufferedInputStream bis = new BufferedInputStream(fis); + int fileLength = (int) f.length(); + byte[] bytes = new byte[fileLength]; + int len = bis.read(bytes); + bis.close(); + fis.close(); + System.out.println("璇诲彇鏂囦欢鎴愬姛---" + filePath); + return bytes; + } catch (Exception e1) { + System.out.println("璇诲彇鏂囦欢鏈夊紓甯�---" + e1.getMessage()); + return null; + } + + } + + /** + * 璇诲彇鏂囦欢 + * + * @param filePath 鍏ㄨ矾寰� + * @return 鏁版嵁 + */ + public String readFile(String filePath) { + try { + byte[] bytes = readFileByte(filePath); + if (bytes == null) { + return ""; + } + return new String(bytes); + } catch (Exception e1) { return ""; } } + + /** + * 璇诲彇鏂囦欢 + * + * @param filePath 鍏ㄨ矾寰� + * @return 鏁版嵁 + */ + public FileInputStream fileStream(String filePath) { + try { + if (!isBoolean(filePath)) { + return null; + } + File f = new File(filePath); + if (!f.exists()) { + return null; + } + fileLength = f.length(); + return new FileInputStream(f); + } catch (Exception e1) { + System.out.println("璇诲彇鏂囦欢鏈夊紓甯�---" + e1.getMessage()); + return null; + } + + } + + public static long fileLength = 0; + + /** + * 鎸囧畾鍒犻櫎鏂囦欢琛屾暟锛堜粠鍓嶉潰鍒犻櫎璧凤級 + * + * @param filePath 璺緞 + * @param delLienSum 鍒犻櫎澶氬皯琛屾暟 + */ + public void delFileLien(String filePath, int delLienSum) { + if (!isBoolean(filePath)) { + return; + } + //鎵撳紑鏂囦欢 + File file = new File(filePath); + //濡傛灉path鏄紶閫掕繃鏉ョ殑鍙傛暟锛屽彲浠ュ仛涓�涓潪鐩綍鐨勫垽鏂� + if (file.isDirectory()) { + System.out.println("杩欐槸涓�涓洰褰�"); + return; + } + StringBuilder content = new StringBuilder(); //鏂囦欢鍐呭瀛楃涓� + try { + InputStream inputStream = new FileInputStream(file); + InputStreamReader inputStreamReader = new InputStreamReader(inputStream); + BufferedReader bufferedReader = new BufferedReader(inputStreamReader); + String line; + int lineCount = 0; + //鍒嗚璇诲彇 + while ((line = bufferedReader.readLine()) != null) { + lineCount += 1; + if (lineCount > delLienSum) { + content.append(line).append("\r\n"); + } + } + inputStream.close(); + //鍒犻櫎鎺夋棫鏂囦欢 + this.deleteFile(filePath); + //閲嶆柊鍒涘缓鏂囦欢骞朵笖鍐欏叆鏁版嵁 + this.writeFile(filePath, content.toString()); + } catch (Exception ignored) { + } + } + + /** + * 鎵撳紑璧勬簮鏂囦欢 + * + * @param fileName 鏂囦欢鍚� + * @param context 涓婁笅鏂� + * @return 杩斿洖json瀛楃涓� + */ + public String openAssetsFileJson(String fileName, Context context) { + if (TextUtils.isEmpty(fileName)) { + return ""; + } + //灏唈son鏁版嵁鍙樻垚瀛楃涓� + StringBuilder stringBuilder = new StringBuilder(); + try { + //鑾峰彇assets璧勬簮绠$悊鍣� + AssetManager assetManager = context.getAssets(); + //閫氳繃绠$悊鍣ㄦ墦寮�鏂囦欢骞惰鍙� + BufferedReader bf = new BufferedReader(new InputStreamReader(assetManager.open(fileName))); + String line; + while ((line = bf.readLine()) != null) { + stringBuilder.append(line); + } + } catch (IOException e) { + e.printStackTrace(); + } + return stringBuilder.toString(); + } + + /** + * 鍒ゆ柇璺緞鏄惁鍚堟硶 + * + * @param path 璺緞 + * @return true鍚堟硶 + */ + public boolean isBoolean(String path) { + if (path.contains("//") || path.contains("\\")) { + System.out.println("鏃犳晥鏂囦欢璺緞---" + path); + return false; + } + return true; + } + //endregion /** * 鎶婁綅鍥炬暟鎹繚瀛樺埌鎸囧畾璺緞鐨勫浘鐗囨枃浠� @@ -163,9 +597,10 @@ bos.close(); - } catch (Exception e) { + } catch (Exception ignored) { } } + //</editor-fold> /** * 浠庢寚瀹氳矾寰勭殑鍥剧墖鏂囦欢涓鍙栦綅鍥炬暟鎹� @@ -179,10 +614,10 @@ //鍏抽棴缂撳瓨杈撳叆娴� bis.close(); return bitmap; - - } catch (Exception e) { } return null; } + + } -- Gitblit v1.8.0