android - 如何在 Android 中读取文本文件?
问题描述
我有一个文本文件复制到 Android 设备。在我的应用程序中,我想浏览文件,阅读并处理它。问题是,我找不到能够可靠地获取文件路径来读取文件的方法。
我使用以下代码启动选择器:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
try {
startActivityForResult(Intent.createChooser(intent, "Select a File to Upload"), FILE_SELECT_CODE);
} catch (android.content.ActivityNotFoundException ex) {
}
上onActivityResult
,我试图获取路径,并且在不同的设备上观察到不同的行为。
安卓 8设备:
Uri uri = data.getData();
String path = uri.getPath(); // --> /external_files/info.txt
String fileName = uri.getLastPathSegment(); // --> info.txt
String absPath = Environment.getExternalStorageDirectory().getAbsolutePath() --> /storage/emulated/0
// /storage/emulated/0/info.txt --> I can open the file with this path
安卓 7设备:
Uri uri = data.getData();
String path = uri.getPath(); // --> /document/primary:info.txt
String fileName = uri.getLastPathSegment(); // --> primary:info.txt
String absPath = Environment.getExternalStorageDirectory().getAbsolutePath() --> /storage/emulated/0
// /storage/emulated/0/info.txt --> I can open the file with this path
是否有任何机制可以让我获得读取文件的路径。
谢谢, GL
解决方案
您可以使用此代码获取文件内容,而不是获取路径并再次读取:
Uri uri = data.getData();
InputStreamReader inputStreamReader = new InputStreamReader(getContentResolver().openInputStream(uri));
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuilder sb = new StringBuilder();
String s;
while ((s = bufferedReader.readLine()) != null) {
sb.append(s);
}
String fileContent = sb.toString();
请注意,这些行需要包装到 try-catch 块中,并且不要忘记关闭流。
推荐阅读
- python - Python:如何在不耗尽内存的情况下提取 Google Cloud Storage 中的 Zip 文件?
- reactjs - React Suspense 没有按预期工作
- node.js - 将远程文件传递到 Node.js 应用程序中的 libreoffice-convert 库时收到“错误:没有这样的文件或目录,打开”
- autodesk-forge - 无法获取 /api/forge/oauth/callback
- python - 使用 pd.read_html 复制表
- python - POST 方法不适用于 Flask 应用程序 - 错误 404
- javascript - 无法对减速器中未安装的组件执行 React 状态更新
- python - 所以我正在处理一个 .csv 文件,发现在给定的数据中,事情的格式并不像他们应该的那样
- java - 用动画动态改变视图的宽度
- python-3.x - 如何在scrapy爬虫中使用代理?