有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从资产中的文本文件中读取两次,扫描仪不带缓冲读取器

我在assets文件夹中有一个文本文件,目录是main/src/assets/socso。txt,当我试图读取它时,会发生错误。我读了很多其他的问题,其中包括一个whr要放在文本文件中的问题,我非常确定我做的是正确的,并且大多数示例都使用了缓冲读取器,我不希望这样,所以我修改了它,但仍然出现错误。我试图做的是使用scanner逐字读取文本文件中的双数据类型,因此不应该使用缓冲读取器。下面是我使用过的一些代码:

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) 个答案

  1. # 1 楼答案

    不能从片段调用getAssets()方法,需要上下文才能访问这些文件。因此,导致问题的行必须是这样才能消除错误

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