From a72118a5a681b7df33102b54c9b5c666fd7c0f7f Mon Sep 17 00:00:00 2001 From: Matthew Date: Mon, 9 Jun 2025 16:33:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=9B=9E=E8=BD=A6=E6=8D=A2?= =?UTF-8?q?=E8=A1=8C=E7=9A=84=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xypower/mpapp/MicroPhotoService.java | 4 +- .../java/com/xypower/common/FilesUtils.java | 57 +++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java index b5726efb..461f0dbd 100644 --- a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java +++ b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java @@ -279,7 +279,9 @@ public class MicroPhotoService extends Service { if (ethShellFile.exists()) { ethShellFile.delete(); } - FilesUtils.copyAssetsFile(context, "eth.sh", ethShellFile.getAbsolutePath()); + FilesUtils.copyAndNormalizeTextAssetsFile(context, "eth.sh", ethShellFile.getAbsolutePath()); + + // sed -i 's/\r$//' eth.sh File ethToolFile = new File(filesDir, "ethtool"); if (ethToolFile.exists()) { diff --git a/common/src/main/java/com/xypower/common/FilesUtils.java b/common/src/main/java/com/xypower/common/FilesUtils.java index 45de33ce..b15a4295 100644 --- a/common/src/main/java/com/xypower/common/FilesUtils.java +++ b/common/src/main/java/com/xypower/common/FilesUtils.java @@ -8,6 +8,7 @@ import android.util.Log; import org.w3c.dom.Text; import java.io.BufferedReader; +import java.io.BufferedWriter; import java.io.Closeable; import java.io.File; import java.io.FileInputStream; @@ -16,6 +17,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; +import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.nio.channels.Channels; import java.nio.channels.SeekableByteChannel; @@ -412,4 +414,59 @@ public class FilesUtils { FilesUtils.closeFriendly(fos); } } + + /** + * 复制Assets中的文本文件到指定路径,并将CRLF转换为LF格式 + * + * @param context 上下文 + * @param fileName Assets中的文件名 + * @param destPath 目标路径 + */ + public static void copyAndNormalizeTextAssetsFile(Context context, String fileName, String destPath) { + InputStream inputStream = null; + BufferedReader reader = null; + BufferedWriter writer = null; + + try { + inputStream = context.getAssets().open(fileName); + reader = new BufferedReader(new InputStreamReader(inputStream)); + + // 创建目标文件 + File file = new File(destPath); + if (file.exists()) { + file.delete(); + } + + File parentDir = file.getParentFile(); + if (parentDir != null && !parentDir.exists()) { + parentDir.mkdirs(); + } + + if (parentDir != null && !parentDir.canWrite()) { + Log.e("FilesUtils", "No write permission to directory: " + parentDir.getAbsolutePath()); + return; + } + + // 使用BufferedWriter写入文件,同时处理行尾符 + writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))); + + String line; + // 逐行读取并写入,由BufferedWriter自动处理行尾 + while ((line = reader.readLine()) != null) { + writer.write(line); + writer.newLine(); // 使用平台默认的换行符(在Android上是LF) + } + + writer.flush(); + Log.d("FilesUtils", "File normalized and copied successfully: " + destPath); + + } catch (Exception e) { + Log.e("FilesUtils", "Error normalizing file: " + e.getMessage(), e); + } finally { + closeFriendly(reader); + closeFriendly(writer); + closeFriendly(inputStream); + } + } + }