我想打开一个。csv文件,将数据导入到手机上的本地数据库。我也想让用户选择。csv文件使用ACTION_OPEN_DOCUMENT的意图,但是,当我看到结果的Uri,并尝试uri.getPath()
,它返回/document/85
。
我期待更像/downloads/file.csv
的东西,但它甚至不包含文件名。
我只在运行android 11的手机上测试了这个,所以它可能是一个权限问题,但我已经授予WRITE_EXTERNAL_STORAGE
在我检查权限之后,它只执行3步:
public void Import(){
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("text/csv");
startActivityForResult(intent, OPEN_BACKUP);
}
然后处理结果:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == OPEN_BACKUP && resultCode == Activity.RESULT_OK) {
Uri uri = null;
if (data != null) {
uri = data.getData();
ImportCSV(this, uri);
}
}
}
然后调用这个函数:
private void ImportCSV(Context ctx, Uri uri){
try {
CSVReader csvReader = new CSVReader(new FileReader(uri.getPath()));
} catch (FileNotFoundException e) {
Log.d("Bruh", uri.getPath()); //Always logs '/document/85'
e.printStackTrace();
}
}
我几乎可以肯定问题出在第二步,但我不知道是什么问题。任何帮助都很感激,谢谢!
(只要问你是否需要更多的信息)
对于FileReader,您可以使用Uri中的FileDescriptor。https://developer.android.com/training/secure-file-sharing/request-file
FileReader(contentResolver.openFileDescriptor(uri, "r").fileDescriptor)