Environment.getExternalStorageDirectory().getPath() + "/sdcard/xiaoshipin/import/inventory.xlsx";有什么问题吗,为什么或得到的路径是空的
时间: 2024-01-22 12:01:52 浏览: 119
这段代码的问题在于硬编码了文件路径,而且路径中包含了 `/sdcard` 这个字符串。在一些 Android 设备上,外部存储目录的路径不一定是 `/sdcard`,有些设备可能是 `/mnt/sdcard`,或者 `/storage/sdcard0` 等等。因此,最好使用 `Environment.getExternalStorageDirectory()` 方法来获取外部存储目录的路径,而不是硬编码路径。另外,还需要确保应用程序已经获取了外部存储读写的权限。
如果获取到的路径是空的,可能是因为应用程序没有读取外部存储的权限,或者指定的文件夹不存在。可以通过调用 `mkdirs()` 方法来创建整个文件夹目录结构。例如:
```
File dir = new File(Environment.getExternalStorageDirectory(), "/xiaoshipin/import/");
if (!dir.exists()) {
dir.mkdirs();
}
String filePath = dir.getPath() + "/inventory.xlsx";
```
这样就可以避免硬编码路径,并且确保文件夹存在,从而避免获取到的路径为空的问题。
相关问题
private void init() { this.list = new ArrayList<>(); //this.filePath = Environment.getExternalStorageDirectory().getPath() + "/sdcard/xiaoshipin/import/inventory.xlsx"; File dir = new File(Environment.getExternalStorageDirectory(), "/sdcard/xiaoshipin/import/"); if (!dir.exists()) { dir.mkdirs(); } String filePath = dir.getPath() + "/inventory.xlsx"; this.excelList = ExcelUtils.read(filePath); if (excelList != null) { for (Map<String, String> map : excelList) { ExcelImportViewModel model = new ExcelImportViewModel(); model.SKU =Double.parseDouble(map.get("SKU")); model.name = map.get("商品"); model.barCode = map.get("條碼"); model.real_inventory = Double.parseDouble(map.get("預期應有庫存")); model.difference = map.get("差值"); model.CostDifference = map.get("成本差值"); list.add(model); } } iv.inventoryList = list; }this.excelList = ExcelUtils.read(filePath);为null
根据你提供的代码,可以看出读取 Excel 文件的操作是通过调用 `ExcelUtils.read(filePath)` 方法实现的。如果该方法返回 `null`,那么就说明读取 Excel 文件失败了。
你可以尝试使用日志打印功能,输出 `filePath` 的值,然后检查该路径下是否存在名为 `inventory.xlsx` 的文件。如果文件不存在,那么读取操作肯定会失败,返回 `null`。
另外,你也可以检查一下 Excel 文件的格式是否正确。如果 Excel 文件格式不正确,读取操作同样会失败,返回 `null`。
最后,如果你仍然无法解决问题,请提供更多的错误信息或者调试信息,以便更好地帮助你解决问题。
public static String appFolderImportName = Environment.getExternalStorageDirectory().getPath() + "/xiaoshipin/import";读取到错误的文件路径
可能的原因是您的应用程序没有外部存储的读写权限,或者外部存储设备未正确挂载。您可以在应用程序的AndroidManifest.xml文件中添加以下权限声明:
```xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
```
此外,从Android 10开始,应用程序需要使用`android:requestLegacyExternalStorage="true"`属性来访问外部存储设备。如果您的应用程序目标为Android 10或更高版本,则应该考虑使用新的存储访问框架来代替直接访问外部存储设备。
阅读全文