我有一个类QuoteBank需要读取扫描仪的txt文件,但它给我一个文件未找到异常
java文件位于app / src / main / java / nate.marxBros / QuoteBank.java
txt文件位于app / src / main / assets / Quotes.txt
代码是
File file = new File("assets/QuotesMonkeyBusiness.txt");
Scanner input = null;
try {
input = new Scanner(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
这不能像其他任何java程序一样工作吗?但它给文件找不到异常
我在这个网站上尝试了很多东西,比如Android Studio Reading from Raw Resource Text File,但是这个方法不起作用,因为我不知道如何传递上下文
谢谢你的帮助
更新的代码
public class QuoteBank {
private ArrayList<ArrayList<QuoteBank>> bank;
private Context mContext;
private ArrayList<QuoteQuestion> monkeyBuisness;
public QuoteBank(Context context){
mContext = context;
InputStream is = null;
try {
is = mContext.getAssets().open("QuotesMonkeyBusiness.txt");
} catch (IOException e) {
e.printStackTrace();
}
ArrayList<QuoteQuestion> monkeyBuisness = parseFileToBank(is);
}
主要活动
public class MainActivity extends ActionBarActivity {
QuoteBank b = new QuoteBank(MainActivity.this);
3 回答
你应该有
MainActivity.java
或某些Activity
来实例化QuoteBank
. 您希望构造函数接受上下文的参数:在
QuoteBank.java
中设置一个私有变量:设置构造函数:
然后在你的活动中实例化它,
可以通过
this
命令在活动中调用上下文变量,或者在Activity.this
中使用您的活动名称替换"Activity" . 或者,如果您在片段内,则可以从onCreateView(...)
方法中的View
对象获取上下文 . 通常通过调用view.getContext()
.现在,在您抓取资产的方法中,您可以使用上下文:
由于你正在使用android studio,你可以创建一个
main(String[] args) { ... }
方法并运行它,或者只是启动模拟器并让它使用Log.d(...)
来显示文件的输出 .或者,您也可以使用以下方法:
将
QuoteBank
作为单例实例也可能有意义,这可能会提高效率,尽管这完全取决于您的要求,可能是这样的:然后在你的
QuoteBank.java
课程中,您可以使用如下方法:}
然后在我的
MainActivity.java
课程中我有以下内容:这是我的项目结构:
这是我从随机数据库下载的
adventur.txt
文件:这是我的日志输出:
UPDATE: Why you should not use a Scanner in Android
从官方文档:
http://developer.android.com/reference/java/util/Scanner.html
FINAL NOTE:
我强烈建议您阅读此处使用的所有对象的文档,以便您了解该过程 .
Context.getResources().getAssets().open("QuotesMonkeyBusiness.txt");
返回InputStream
其余的你可以从那里拿走它Edit
Context
实际上到处都是如果你有一个View
你可以得到Context
,如果你Activity
你可以得到Context
所以找到它希望能帮助到你
一个简单问题的简单答案 .
只需使用函数读取外部文件即可 .