以下是我在缓冲读取扩展/修改活动中所做的工作,以满足您的需求
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("filename.txt")));
// do reading, usually loop until end of file reading
String mLine;
while ((mLine = reader.readLine()) != null) {
//process line
...
}
} catch (IOException e) {
//log the exception
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
//log the exception
}
}
}
编辑:如果你的问题是关于如何在活动之外做这件事,我的回答可能是无用的。如果你的问题只是如何从资产读取文件,那么答案在上面。
更新:
要打开指定类型的文件,只需在InputStreamReader调用中添加类型,如下所示。
BufferedReader reader = null;
try {
reader = new BufferedReader(
new InputStreamReader(getAssets().open("filename.txt"), "UTF-8"));
// do reading, usually loop until end of file reading
String mLine;
while ((mLine = reader.readLine()) != null) {
//process line
...
}
} catch (IOException e) {
//log the exception
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
//log the exception
}
}
}
EDIT
正如@Stan在评论中所说,我给出的代码不是对行求和。mLine每次传递都会被替换。这就是为什么我写了//process行。我假设文件包含某种类型的数据(即联系人列表),每一行都应该单独处理。
如果你只是想在没有任何处理的情况下加载文件,你必须在每次传递时使用StringBuilder()对mLine求和并追加每个传递。
另一个编辑
根据@Vincent的评论,我添加了最后一个块。
还要注意,在Java 7及以上版本中,您可以使用try-with-resources来使用最新Java的AutoCloseable和Closeable特性。
上下文
@LunarWatcher在评论中指出getAssets()是上下文中的一个类。因此,如果你在活动之外调用它,你需要引用它并将上下文实例传递给活动。
ContextInstance.getAssets();
这在@Maneesh的回答中有解释。所以如果这对你有用的话,给他的答案投上一票因为是他指出了这一点。