一、使用jxl 读取excel文件
1.build.gradle的dependencies中加入 
implementation 'net.sourceforge.jexcelapi:jxl:2.6.12' 
2.将xls文件复制到assets文件夹
3.读取文件内容:
public static List<ContentBean> readExcelToAssets(Context context) { 
List<ContentBean> contentBeans = new ArrayList<>(); try { InputStream is = 
context.getAssets().open("App.xls"); Workbook book = Workbook.getWorkbook(is); 
book.getNumberOfSheets(); Sheet sheet = book.getSheet(0); int Rows = 
sheet.getRows(); for (int i = 1; i < Rows; ++i) { String key = 
(sheet.getCell(0, i)).getContents(); List<String> values = new ArrayList<>(); 
String value1 = (sheet.getCell(1, i)).getContents(); values.add(value1); String 
value2 = (sheet.getCell(2, i)).getContents(); values.add(value2); String value3 
= (sheet.getCell(3, i)).getContents(); values.add(value3); String value4 = 
(sheet.getCell(4, i)).getContents(); values.add(value4); String value5 = 
(sheet.getCell(5, i)).getContents(); values.add(value5); contentBeans.add(new 
ContentBean(key, values)); Log.e("FileUtil", "第" + i + "行数据=\n" + key + "," + 
value1 + "," + value2 + "," + value3 + "," + value4 + "," + value5); } 
book.close(); } catch (Exception e) { Log.e("FileUtil", "e" + e); } return 
contentBeans; } 
二、使用XmlPullParser读取xml文件
1.将xml文件复制到assets文件夹
2.读取文件内容:
/** * 获取XML中所有的指令信息 * xml文件内容: * <resources> * <string 
name="app_name">APP</string> * </resources> */ public static List<LanguageBean> 
parseDateSource(Context context) { List<LanguageBean> languageBeans = new 
ArrayList<>(); try { InputStream inputStream = 
context.getAssets().open("strings.xml"); XmlPullParser parse = 
Xml.newPullParser(); parse.setInput(inputStream, "utf-8"); int event = 
parse.getEventType(); while (event != XmlPullParser.END_DOCUMENT) { switch 
(event) { case XmlPullParser.START_DOCUMENT: Log.e("FileUtil", "parseDateSource 
初始化指令集合"); break; case XmlPullParser.START_TAG: String keys = parse.getName(); 
// <string name="app_name">APP</string> // 读取string标签下的值,key = app_name,value = 
APP if (keys.equals("string")) { String key = parse.getAttributeValue(null, 
"name"); String value = parse.nextText(); Log.e("FileUtil", "START_TAG " + key 
+ "," + value); languageBeans.add(new LanguageBean(key, value)); } else { 
Log.e("FileUtil", "START_TAG keys " + keys); } break; case 
XmlPullParser.END_TAG: Log.e("FileUtil", "END_TAG"); break; default: break; } 
event = parse.next();// 进入到下一个元素并触发相应事件 } } catch (IOException e) { 
e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); 
} return languageBeans; } 
完整的FileUtil工具类:
package com.file.util.file; import android.content.Context; import 
android.os.Build; import android.os.Environment; import android.text.TextUtils; 
import android.util.Log; import android.util.Xml; import 
androidx.annotation.RequiresApi; import com.file.util.MainActivity; import 
com.file.util.bean.ContentBean; import com.file.util.bean.LanguageBean; import 
org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; 
import java.io.BufferedWriter; import java.io.File; import 
java.io.FileInputStream; import java.io.FileOutputStream; import 
java.io.IOException; import java.io.InputStream; import 
java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.List; 
import jxl.Sheet; import jxl.Workbook; /** * @Author: Jin * @Description: * 
@CreateDate: 2022/11/17 16:34 */ public class FileUtil { public static void 
readExcel(Context context) { String logFilePath = 
Environment.getExternalStorageDirectory() + File.separator + "Visitor"; File 
file = new File(logFilePath, "test.xls"); Log.e("FileUtil", "file=" + 
file.getAbsolutePath()); try { InputStream is = new FileInputStream(file); 
Workbook book = Workbook.getWorkbook(is); book.getNumberOfSheets(); Sheet sheet 
= book.getSheet(0); int Rows = sheet.getRows(); for (int i = 1; i < Rows; ++i) 
{ String name = (sheet.getCell(0, i)).getContents(); String department = 
(sheet.getCell(1, i)).getContents(); String company = (sheet.getCell(2, 
i)).getContents(); String phone = (sheet.getCell(3, i)).getContents(); 
Log.e("FileUtil", "第" + i + "行数据=" + name + "," + department + "," + company + 
"," + phone); } book.close(); } catch (Exception e) { Log.e("FileUtil", "e" + 
e); } } public static List<ContentBean> readExcelToAssets(Context context) { 
List<ContentBean> contentBeans = new ArrayList<>(); try { InputStream is = 
context.getAssets().open("App.xls"); Workbook book = Workbook.getWorkbook(is); 
book.getNumberOfSheets(); Sheet sheet = book.getSheet(0); int Rows = 
sheet.getRows(); for (int i = 1; i < Rows; ++i) { String key = 
(sheet.getCell(0, i)).getContents(); List<String> values = new ArrayList<>(); 
String value1 = (sheet.getCell(1, i)).getContents(); values.add(value1); String 
value2 = (sheet.getCell(2, i)).getContents(); values.add(value2); String value3 
= (sheet.getCell(3, i)).getContents(); values.add(value3); String value4 = 
(sheet.getCell(4, i)).getContents(); values.add(value4); String value5 = 
(sheet.getCell(5, i)).getContents(); values.add(value5); contentBeans.add(new 
ContentBean(key, values)); Log.e("FileUtil", "第" + i + "行数据=\n" + key + "," + 
value1 + "," + value2 + "," + value3 + "," + value4 + "," + value5); } 
book.close(); } catch (Exception e) { Log.e("FileUtil", "e" + e); } return 
contentBeans; } /** * 获取XML中所有的指令信息 * xml文件内容: * <resources> * <string 
name="app_name">APP</string> * </resources> */ public static List<LanguageBean> 
parseDateSource(Context context) { List<LanguageBean> languageBeans = new 
ArrayList<>(); try { InputStream inputStream = 
context.getAssets().open("strings.xml"); XmlPullParser parse = 
Xml.newPullParser(); parse.setInput(inputStream, "utf-8"); int event = 
parse.getEventType(); while (event != XmlPullParser.END_DOCUMENT) { switch 
(event) { case XmlPullParser.START_DOCUMENT: Log.e("FileUtil", "parseDateSource 
初始化指令集合"); break; case XmlPullParser.START_TAG: String keys = parse.getName(); 
// <string name="app_name">APP</string> // 读取string标签下的值,key = app_name,value = 
APP if (keys.equals("string")) { String key = parse.getAttributeValue(null, 
"name"); String value = parse.nextText(); Log.e("FileUtil", "START_TAG " + key 
+ "," + value); languageBeans.add(new LanguageBean(key, value)); } else { 
Log.e("FileUtil", "START_TAG keys " + keys); } break; case 
XmlPullParser.END_TAG: Log.e("FileUtil", "END_TAG"); break; default: break; } 
event = parse.next();// 进入到下一个元素并触发相应事件 } } catch (IOException e) { 
e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); 
} return languageBeans; } public static List<String> makeContent(Context 
context, int type) { List<String> contents = new ArrayList<>(); 
List<LanguageBean> languageBeans = FileUtil.parseDateSource(context); 
List<ContentBean> contentBeans = FileUtil.readExcelToAssets(context); // 寻找语言 
for (LanguageBean languageBean : languageBeans) { for (ContentBean contentBean 
: contentBeans) { if (TextUtils.equals(languageBean.getValue(), 
contentBean.getKey())) { if (contentBean.getValues().size() > type) { 
languageBean.setValue(contentBean.getValues().get(type)); } break; } } } // 
组装结果 for (LanguageBean languageBean : languageBeans) { String content = 
"<string name=\"" + languageBean.getKey() + "\">" + languageBean.getValue() + 
"</string>"; Log.i("FileUtil", "makeContent " + content); 
contents.add(content); } return contents; } @RequiresApi(api = 
Build.VERSION_CODES.KITKAT) public static void saveXML(Context context, int 
type) { File file = 
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS + 
"/RedKey/language/"); if (!file.exists()) { file.mkdirs(); } BufferedWriter out 
= null; try { out = new BufferedWriter(new OutputStreamWriter(new 
FileOutputStream(file.getAbsoluteFile() + "/" + "language_" + 
getLanguageName(type) + ".txt", true))); List<String> contents = 
makeContent(context, type); for (String content : contents) { out.write(content 
+ "\n"); } } catch (Exception e) { e.printStackTrace(); } finally { try { 
out.close(); } catch (IOException e) { e.printStackTrace(); } } } private 
static String getLanguageName(int type) { String languageName = ""; switch 
(type) { case 0: languageName = "en"; break; case 1: languageName = "ru"; 
break; case 2: languageName = "de"; break; case 3: languageName = "fr"; break; 
case 4: languageName = "pl"; break; } return languageName; } }