Java 直到最后才读取文件

Java 直到最后才读取文件,java,android,arraylist,Java,Android,Arraylist,我不熟悉Android开发和Java。请容忍我 所以,我正在制作一个应用程序,从一个网页列表中打开一个随机网页 代码读取包含所有链接的assets文件夹中的文本文件,并列出链接列表,然后随机选择一个 所以问题是我已经输入了日志消息,以检查程序是否正在读取和填充数组,直到文本的最后一行 日志消息显示列表的大小为1301。而我的文本文件包含2601个链接。 我似乎不明白我错在哪里 下面是java代码片段 int sd=0; List<String> links=new A

我不熟悉Android开发和Java。请容忍我

所以,我正在制作一个应用程序,从一个网页列表中打开一个随机网页 代码读取包含所有链接的assets文件夹中的文本文件,并列出链接列表,然后随机选择一个

所以问题是我已经输入了日志消息,以检查程序是否正在读取和填充数组,直到文本的最后一行

日志消息显示列表的大小为1301。而我的文本文件包含2601个链接。 我似乎不明白我错在哪里

下面是java代码片段

    int sd=0;
    List<String> links=new ArrayList<>();
    try {
        AssetManager assetManager = getAssets();
        InputStream assetIn = assetManager.open("android");
        BufferedReader r = new BufferedReader(new InputStreamReader(assetIn));
        while (r.readLine() != null) {
            links.add(r.readLine());
            sd++;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
        Random r=new Random();
        //String len= Integer.toString(links.size());

        String len= Integer.toString(sd);
        Log.i("total loop",len);
        String randomLink=links.get(r.nextInt(links.size()));
        Log.i("link select :",randomLink);
        webView.loadUrl(randomLink);
intsd=0;
列表链接=新建ArrayList();
试一试{
AssetManager AssetManager=getAssets();
InputStream assetIn=assetManager.open(“android”);
BufferedReader r=新的BufferedReader(新的InputStreamReader(assetIn));
while(r.readLine()!=null){
links.add(r.readLine());
sd++;
}
}捕获(IOE异常){
e、 printStackTrace();
}
随机r=新随机();
//字符串len=Integer.toString(links.size());
字符串len=Integer.toString(sd);
Log.i(“总循环”,len);
字符串randomLink=links.get(r.nextInt(links.size());
Log.i(“链接选择:”,随机链接);
loadUrl(随机链接);

您调用了两次
readLine()
,因此每次迭代读取2行而不是1行:

while (r.readLine() != null) { // reads a line
    links.add(r.readLine()); // reads another line
    sd++; // increments by 1 every *2* lines read
}
您可能想使用:

while ((line = r.readLine()) != null) {
   links.add(line);
   sd++;
}

调用
readLine()
两次,因此每次迭代读取2行而不是1行:

while (r.readLine() != null) { // reads a line
    links.add(r.readLine()); // reads another line
    sd++; // increments by 1 every *2* lines read
}
您可能想使用:

while ((line = r.readLine()) != null) {
   links.add(line);
   sd++;
}

您在循环中反复阅读行,如下所示:

1)
while(r.readLine()!=null){
2)
links.add(r.readLine());

因此,它应该是:

    String line = "";
    while ((line = r.readLine()) != null) {
        links.add(line);
        sd++;
    }

您在循环中反复阅读行,如下所示:

1)
while(r.readLine()!=null){
2)
links.add(r.readLine());

因此,它应该是:

    String line = "";
    while ((line = r.readLine()) != null) {
        links.add(line);
        sd++;
    }

请继续输入:你们还没问这个问题。也许他不小心撞到了post(在投票前给他一点时间:)你们按enter键太快了吗?来吧,伙计们,不要投赞成票(或反对票)这也是。让我们等一下……是的,我不小心按了post按钮。对此表示抱歉。请继续键入:你还没有问这个问题。也许他不小心按了post,在投票前给他一点时间:)你按enter键太快了吗?来吧,伙计们,不要投赞成票(或反对票)这也是。让我们等一下……是的,我不小心按下了post按钮。很抱歉。