Android Studio Java应用中内置CSV文件读取失败,无法加载Spinner数据求助
Android Studio Java应用中内置CSV文件读取失败,无法加载Spinner数据求助
嗨,我完全懂你现在的困扰——把CSV内置到应用里读取的逻辑,和从外部文件系统读取确实不一样,你当前的问题核心出在文件路径的获取方式上,咱们一步步来解决:
首先,你提到把CSV放在了assets文件夹,但代码里用的getFilesDir()指向的是应用的内部可写入存储目录,和assets目录完全不是一个位置,所以自然找不到文件啦。Assets里的文件是打包在APK里的只读资源,得用Android的AssetManager来访问,不能直接用FileReader去读。
正确的解决步骤:
确认文件位置:
确保你的ShelterInfo.csv确实放在src/main/assets目录下(如果没有assets文件夹,右键点击main目录 → New → Folder → Assets Folder,按提示创建即可)。注意文件名要完全匹配,Android是区分大小写的,别出现拼写错误。修改读取代码:
替换你原来的文件读取逻辑,用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
相关产品推荐
相关产品推荐

