我在assets文件夹中有一个文本文件,目录是main / src / assets / socso.txt,当我尝试读取它时会发生错误。我读了很多其他的问题,其中包括一个放在文本文件中的问题,我非常确定我做得正确,大多数例子都使用了我不想要的缓冲读卡器,所以我修改了它但仍然会发生错误。我想要做的是使用扫描仪逐字逐句地从文本文件中读取双数据类型,因此不应该使用缓冲读取器。以下是我使用的一些代码:
InputStreamReader sc = new InputStreamReader(getAssets().open("socso.txt"));
Vector v = new Vector();
Iterator i = v.iterator();
String llimit;
while((llimit = sc.toString()) != null)
{
Socso s = new Socso();
s.setLowerlimit(Double.parseDouble(llimit));
s.setUpperlimit(Double.parseDouble(sc.toString()));
s.setEmployershares(Double.parseDouble(sc.toString()));
s.setEmployeeshares(Double.parseDouble(sc.toString()));
s.setType2(Double.parseDouble(sc.toString()));
v.add(s);
}
sc.close();
//when I run this, I can;t even run as error occur
另一个版本
//InputStream is = resources.getAssets().open("socso.txt"); (When I use this it appears as error too)
FileInputStream is = new FileInputStream(socso.txt); //(use this appear FileNotFoundException)
Scanner sc = new Scanner(is);
Vector v = new Vector();
Iterator i = v.iterator();
while(sc.hasNext())
{
Socso s = new Socso();
s.setLowerlimit(sc.nextDouble());
s.setUpperlimit(sc.nextDouble());
s.setEmployershares(sc.nextDouble());
s.setEmployeeshares(sc.nextDouble());
s.setType2(sc.nextDouble());
v.add(s);
}
我还尝试过另一个问题的AssetManager,但答案只是没有回答我的问题,因为上下文语法出现错误,我甚至无法运行它。
答案 0 :(得分:2)
您无法从片段调用getAssets()
方法,您需要 context 才能访问这些文件。因此,导致您出现问题的行必须像这样才能删除错误
InputStream is = getActivity().getResources.getAssets().open("socso.txt");
和
InputStreamReader sc = new InputStreamReader(getActivity().getAssets().open("socso.txt"));
如果要在java类中调用这些函数,请创建一个方法,将 Context 类型的参数传递给它,活动中的上下文是活动本身,虽然片段中的 getActivity() ,所以方法必须是这样的:
public void readDoubleFromText(Context context) {
InputStreamReader sc = new InputStreamReader(context.getAssets().open("socso.txt"));
//rest of function....
}