我已经找到了解决这个问题的不同解决方案,但似乎没有任何效果。
我正在尝试创建一个读取文本文件的应用程序,并在屏幕上显示部分内容。虽然我在阅读文件时遇到问题,但我不知道我做错了什么。我一直在调试代码,它抛出一个IO java异常(fileNotFound)..它不执行代码的文件读取部分..我从未到达while循环..它在我到达之前抛出异常
我把文件放在/res/raw directory
LogCat中的错误输出为:threadid=3 Thread exiting due to uncaught exception
当我编译代码时,它还抱怨第48行的nullPointerException,我不明白,因为我似乎没有达到调试器中的那部分代码。
我做错了什么?
public class AndroidReadTest extends Activity {
HashMap<String, ArrayList<String>> table = new HashMap();
Random rand = new Random();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String category = "";
ArrayList<String> temp = new ArrayList();
try {
/** AssetFileDescriptor descriptor = getAssets().openFd("AndroidReadTest/res/raw/questions");
BufferedReader in = new BufferedReader(new FileReader(descriptor.getFileDescriptor())); */
BufferedReader in = new BufferedReader(new InputStreamReader(getResources().openRawResource(R.raw.questions))); // I have tried adding .txt
while(in.readLine()!=null){
......
}
table.put(category, temp);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Button b = (Button) findViewById(R.id.button1);
b.setOnClickListener(click);
}
public String get(ArrayList<String> questions){
int temp = questions.size();
String str = questions.get(rand.nextInt(temp));
return str;
}
private OnClickListener click = new OnClickListener(){
public void onClick(View V){
TextView text = (TextView) findViewById(R.id.textView1);
text.append(get(table.get("---Cathegory")));
}
};
}
答案 0 :(得分:1)
尝试将文本文件放在项目的assets文件夹中,而不是res / raw。
This page has a nice overview如何存储文件。
AssetManager是您从活动中访问它们的方式。
答案 1 :(得分:0)
这对我有用:
InputStream inputStream = resources.openRawResource(R.raw.filename);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));