下面是我在一个活动中进行缓冲读取时所做的扩展/修改以适应您的需求
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("filename.txt")));
String mLine;
while ((mLine = reader.readLine()) != null) {
...
}
} catch (IOException e) {
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
}
}
}
编辑:如果您的问题是如何在活动之外执行此操作,则我的答案可能没有用处。如果您的问题只是如何从资产中读取文件,则答案在上面。
更新:
要打开指定类型的文件,只需在InputStreamReader调用中添加类型即可,如下所示。
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("filename.txt"), "UTF-8"));
String mLine;
while ((mLine = reader.readLine()) != null) {
...
}
} catch (IOException e) {
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
}
}
}
编辑
正如评论中@Stan所说,我给出的代码并没有累加每行的内容。每次循环mLine
都被替换了。这就是我写//process line
的原因。我假设文件包含一些数据(例如联系人列表),每行应该单独处理。
如果你只想加载文件而不进行任何处理,那么你需要在每次循环中累加mLine
,可以使用StringBuilder()
并将每次循环的结果追加到后面。
另一个编辑
根据@Vincent的评论,我添加了finally
块。
还要注意,在Java 7及以上版本中,您可以使用try-with-resources
来使用最近Java的AutoCloseable
和Closeable
功能。
上下文
在评论中@LunarWatcher指出getAssets()
是context
中的一个class
。因此,如果您在activity
之外调用它,您需要引用它并将上下文实例传递给活动。
ContextInstance.getAssets()
这在@Maneesh的答案中有解释。如果对您有用,请点赞他的答案,因为是他指出了这一点。
finally {reader.close();}
。 - Vincent Cantincontext.getAssets(.....)
。 - Zoe stands with Ukraine