使用没有缓冲读卡器的扫描仪从资源中的文本文件中读取两倍

时间:2016-12-27 14:55:23

标签: java android android-studio

我在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,但答案只是没有回答我的问题,因为上下文语法出现错误,我甚至无法运行它。

1 个答案:

答案 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....
}