You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio Java应用中内置CSV文件读取失败,无法加载Spinner数据求助

Android Studio Java应用中内置CSV文件读取失败,无法加载Spinner数据求助

嗨,我完全懂你现在的困扰——把CSV内置到应用里读取的逻辑,和从外部文件系统读取确实不一样,你当前的问题核心出在文件路径的获取方式上,咱们一步步来解决:

首先,你提到把CSV放在了assets文件夹,但代码里用的getFilesDir()指向的是应用的内部可写入存储目录,和assets目录完全不是一个位置,所以自然找不到文件啦。Assets里的文件是打包在APK里的只读资源,得用Android的AssetManager来访问,不能直接用FileReader去读。

正确的解决步骤:

  1. 确认文件位置:
    确保你的ShelterInfo.csv确实放在src/main/assets目录下(如果没有assets文件夹,右键点击main目录 → New → Folder → Assets Folder,按提示创建即可)。注意文件名要完全匹配,Android是区分大小写的,别出现拼写错误。

  2. 修改读取代码:
    替换你原来的文件读取逻辑,用AssetManager获取输入流来读取CSV,示例代码如下:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView1);
    
        Spinner dropdown = findViewById(R.id.spinner1);
        ArrayAdapter<String> spinnerArrayAdapter;
        CSVReader reader;
    
        try {
            // 获取AssetManager实例
            AssetManager assetManager = getAssets();
            // 打开assets里的CSV文件输入流
            InputStream inputStream = assetManager.open("ShelterInfo.csv");
            // 将输入流转为Reader传给CSVReader
            reader = new CSVReader(new InputStreamReader(inputStream));
            
            // 读取CSV内容并整理成Spinner需要的列表
            String[] nextLine;
            List<String> spinnerItems = new ArrayList<>();
            while ((nextLine = reader.readNext()) != null) {
                // 假设CSV第一列是要显示在Spinner里的内容,根据你的实际数据结构调整
                spinnerItems.add(nextLine[0]);
            }
            
            // 初始化Adapter并绑定到Spinner
            spinnerArrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, spinnerItems);
            spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            dropdown.setAdapter(spinnerArrayAdapter);
    
        } catch (IOException e) {
            e.printStackTrace();
            // 这里可以添加错误提示,比如用Toast告知用户数据加载失败
        }
    }
    

额外说明:

你选择用CSV存储数据的思路完全没问题——毕竟数据来自Excel,转成CSV既方便又轻量化,完全不用换成其他复杂的存储方式,只要解决读取路径的问题就好。

另外要注意:assets里的文件是只读的,如果后续需要修改这些数据,那可能要考虑把文件复制到内部存储或者外部存储后再操作,但如果只是读取显示,用上面的方法就足够了。

备注:内容来源于stack exchange,提问作者Alex Burnett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 20:13:16