android string[] arraylist<string>互转

string[] to arraylist<string>:
eg:
string[] str; arraylist<string> arr;

for(int i=0;i<str.lenght;i++)
{
  arr.add(str[i]);
}

arraylist<string> to string[]:
eg:
string[] str; arraylist<string> arr;

str = new string[arr.size()];
str = arr.toarray(str);

 

 

 

http://blog.youkuaiyun.com/brave_heart_lxl/article/details/6178909

转载于:https://www.cnblogs.com/wjjair/p/3335035.html

<think>我们已知用户需求:读取SD卡根目录下的JSON文件,解析为Map<String, ArrayList<String>>结构。 根据引用[1]:我们可以获取SD卡根目录路径。 步骤: 1. 获取SD卡根目录路径。 2. 构建JSON文件的完整路径。 3. 读取该文件内容。 4. 解析JSON内容为Map<String, ArrayList<String>>。 注意:在Android 6.0及以上需要动态申请存储权限,但题目要求不考虑权限问题,因此假设权限已授予。 实现: 我们将创建一个工具类,包含一个静态方法,用于读取SD卡根目录下的指定JSON文件并解析。 代码结构: 1. 获取SD卡根目录路径(使用Environment.getExternalStorageDirectory())。 2. 创建File对象指向该路径下的文件。 3. 读取文件内容为字符串。 4. 使用JSONObject解析该字符串,构建Map。 注意:JSON文件格式为:一个键对应一个字符串数组。 例如:{"key1":["value1","value2"],"key2":["value3","value4"]} 实现代码:</think>### Android Java 读取 SD 卡 JSON 文件并解析为 Map<String, ArrayList<String>> 以下是完整实现方案,结合引用内容进行优化: #### 1. 添加权限声明(AndroidManifest.xml) ```xml <!-- 添加SD卡读写权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` > 注意:Android 6.0+ 需要动态申请权限[^3],但根据要求暂不考虑权限问题 #### 2. JSON 文件读取解析工具类 ```java import android.os.Environment; import org.json.JSONArray; import org.json.JSONObject; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class SdCardJsonReader { public static Map<String, ArrayList<String>> readJsonFromSdCard(String fileName) { Map<String, ArrayList<String>> resultMap = new HashMap<>(); try { // 1. 获取SD卡根目录路径[^1] File sdCardDir = Environment.getExternalStorageDirectory(); File jsonFile = new File(sdCardDir, fileName); // 2. 读取文件内容 StringBuilder jsonContent = new StringBuilder(); BufferedReader reader = new BufferedReader(new FileReader(jsonFile)); String line; while ((line = reader.readLine()) != null) { jsonContent.append(line); } reader.close(); // 3. 解析JSON数据 JSONObject jsonObject = new JSONObject(jsonContent.toString()); Iterator<String> keys = jsonObject.keys(); while (keys.hasNext()) { String key = keys.next(); JSONArray jsonArray = jsonObject.getJSONArray(key); // 4. 转换为ArrayList<String> ArrayList<String> valueList = new ArrayList<>(); for (int i = 0; i < jsonArray.length(); i++) { valueList.add(jsonArray.getString(i)); } resultMap.put(key, valueList); } } catch (Exception e) { e.printStackTrace(); } return resultMap; } } ``` #### 3. 在Activity中使用 ```java // 调用示例(假设文件名为 data.json) Map<String, ArrayList<String>> jsonData = SdCardJsonReader.readJsonFromSdCard("data.json"); // 访问数据 ArrayList<String> colors = jsonData.get("colors"); if (colors != null) { String firstColor = colors.get(0); // 获取第一个颜色值 } ``` #### 关键实现说明 1. **SD卡路径获取** 使用 `Environment.getExternalStorageDirectory()` 获取SD卡根目录路径[^1] 2. **文件读取优化** - 使用 `BufferedReader` 逐行读取提高大文件处理效率 - `StringBuilder` 拼接文件内容减少内存开销 3. **JSON解析** - 使用 `JSONObject` 和 `JSONArray` 原生解析 - 迭代器遍历所有键值对 - 动态创建 `ArrayList<String>` 存储数组数据 4. **数据结构** - `Map<String, ArrayList<String>>` 符合需求 - 键为字符串(如 "colors") - 值为字符串动态数组(如 ["red", "green", "blue"]) #### 错误处理建议 ```java // 添加空值检查 if (jsonData.containsKey("fruits")) { ArrayList<String> fruits = jsonData.get("fruits"); if (!fruits.isEmpty()) { // 安全操作 } } // 添加文件存在检查 File jsonFile = new File(sdCardDir, fileName); if (!jsonFile.exists()) { Log.e("JSON_READER", "File not found: " + fileName); return resultMap; } ``` #### 性能优化方案 ```java // 使用缓冲流优化读取 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(jsonFile)); ByteArrayOutputStream buf = new ByteArrayOutputStream(); int result = bis.read(); while (result != -1) { buf.write((byte) result); result = bis.read(); } String jsonString = buf.toString("UTF-8"); ``` #### 替代方案:Gson解析(推荐) ```gradle // build.gradle 添加依赖 implementation 'com.google.code.gson:gson:2.10.1' ``` ```java // 使用Gson解析 Type type = new TypeToken<Map<String, ArrayList<String>>>(){}.getType(); Map<String, ArrayList<String>> resultMap = new Gson().fromJson(jsonContent.toString(), type); ``` > Gson方案优点:代码更简洁,自动处理类型转换,支持复杂数据结构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值