Java 使用不带缓冲读取器的扫描仪从资源中的文本文件读取双精度

Java 使用不带缓冲读取器的扫描仪从资源中的文本文件读取双精度,java,android,android-studio,Java,Android,Android Studio,我在assets文件夹中有一个文本文件,目录是main/src/assets/socso.txt,当我试图读取它时,出现了错误。我读了很多其他的问题,其中包括一个whr要放在文本文件中的问题,我非常确定我做的是正确的,并且大多数示例都使用了缓冲读取器,我不希望这样,所以我修改了它,但仍然出现错误。我试图做的是使用scanner逐字读取文本文件中的双数据类型,因此不应该使用缓冲读取器。下面是我使用过的一些代码: InputStreamReader sc = new InputStreamReade

我在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
另一个版本


我还从另一个问题尝试了AssetManager,但答案没有回答我的问题,因为上下文语法出现错误,我甚至无法运行它。

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

InputStream is = getActivity().getResources.getAssets().open("socso.txt");
以及:

如果要在java类中调用这些函数,请创建一个方法,将Context类型的参数传递给它,活动中的Context是活动本身,而片段中的getActivity(),因此该方法必须如下所示:

    public void readDoubleFromText(Context context) {
    InputStreamReader sc = new InputStreamReader(context.getAssets().open("socso.txt"));
//rest of function....
}

您是从片段还是从活动中使用此代码?“我在资产文件夹中有一个文本文件”--然后在
AssetManager上使用
open(“socso.txt”)
。资产是开发机器上的文件,而不是设备上的文件,因此
FileInputStream
将不起作用。另外,
llimit=sc.toString()
是没有意义的,因为
InputStreamReader
上的
toString()
不会从流中返回任何内容。除此之外,我建议使用比文本文件更现代的数据文件格式(如JSON、XML)。Eyad Mhanna,它实际上是java类中某个方法的代码片段,因此我猜它不是activity.Commonware,我可以知道完整的语法吗,就像我如何将它与扫描器一起实例化一样?我已经用第一个替换了它,但它似乎无法解析“getActivity()”部分,是因为代码出现在Java类中的一个方法中吗?如果您在Java类中的一个方法中使用它,则必须将“Context”类型的参数传递给该方法并替换getActivity()有了这个参数,我明白了,但是我应该在实际参数中放什么,比如在活动中,如何解析实际参数中的上下文?当你调用我从活动中发布的方法时,你应该将活动本身作为上下文传递,比如:readDoubleFromText(NameOfYourActivity.this);如果您想从片段调用它,您必须这样做:readDoubleFromText(getActivity());
InputStreamReader sc = new InputStreamReader(getActivity().getAssets().open("socso.txt"));
    public void readDoubleFromText(Context context) {
    InputStreamReader sc = new InputStreamReader(context.getAssets().open("socso.txt"));
//rest of function....
}