Java Android应用程序,从res读取文本文件
对于这个问题,我已经研究了很多不同的解决方案,但似乎都不管用 我正在尝试制作一个可以读取文本文件并在屏幕上显示部分内容的应用程序。但是我在阅读文件时遇到了问题,我不知道我做错了什么。我一直在调试代码,它抛出一个IO java异常(fileNotFound)。。它不执行文件读取部分代码。。我从来没有到达while循环。。它在我到达之前抛出异常 我把文件放在Java Android应用程序,从res读取文本文件,java,android,eclipse,Java,Android,Eclipse,对于这个问题,我已经研究了很多不同的解决方案,但似乎都不管用 我正在尝试制作一个可以读取文本文件并在屏幕上显示部分内容的应用程序。但是我在阅读文件时遇到了问题,我不知道我做错了什么。我一直在调试代码,它抛出一个IO java异常(fileNotFound)。。它不执行文件读取部分代码。。我从来没有到达while循环。。它在我到达之前抛出异常 我把文件放在/res/raw目录中 LogCat中的错误输出为:threadid=3由于未捕获异常而退出的线程 当我编译代码时,它还抱怨第48行出现了nul
/res/raw目录中
LogCat中的错误输出为:threadid=3由于未捕获异常而退出的线程
当我编译代码时,它还抱怨第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")));
}
};
}
公共类AndroidReadTest扩展活动{
HashMap table=新的HashMap();
Random rand=新的Random();
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
字符串类别=”;
ArrayList temp=新的ArrayList();
试一试{
/**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));//我尝试添加.txt
while(in.readLine()!=null){
......
}
表.put(类别、温度);
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
按钮b=(按钮)findViewById(R.id.button1);
b、 setOnClickListener(单击);
}
公共字符串获取(ArrayList问题){
int temp=questions.size();
String str=questions.get(rand.nextInt(temp));
返回str;
}
private OnClickListener click=new OnClickListener(){
公共void onClick(视图V){
TextView text=(TextView)findViewById(R.id.textView1);
text.append(get(table.get(“--Cathegory”));
}
};
}
尝试将文本文件放在项目的资产文件夹中,而不是res/raw
如何存储文件
是您从活动中访问它们的方式。这对我很有用:
InputStream inputStream = resources.openRawResource(R.raw.filename);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
使用资产可能是更好的方式,但我认为这也应该奏效。第48行是哪一行?如果是=…行中的
BufferedReader,则将该行分解为不同的变量(一个用于资源
,一个用于输入流
,等等)。然后再次运行该行,它会告诉您哪个部分正在分解。