黑马程序员技术交流社区
标题:
IO的readLine方法
[打印本页]
作者:
余明辉
时间:
2012-8-14 00:09
标题:
IO的readLine方法
public class Demo {
public static void main(String[] args) throws IOException{
File file =new File("file/a.txt"); //随便读取一个文本文件,最好文件大一点才会出现问题
int b =1;
int i=0;
int a =0;
FileInputStream fis =new FileInputStream(file);
InputStreamReader isr =new InputStreamReader(fis);
while(i<10){
while(a<10){
BufferedReader bis = new BufferedReader(isr);
System.out.println(bis.readLine()+" "+b++); //这里会打印出null ,为什么 ,怎么解决
a++;
if(a==5){break;}
}
i++;
}
}
}
作者:
李知伦
时间:
2012-8-14 00:38
因为你这一句BufferedReader bis = new BufferedReader(isr);在while循环中,就每次都会创建一个BufferedReader(isr)对象,但是只有第一个包装了isr,能读取到第一行,后面的就都读不到数据
内层循环与 i 没有任何关系,外层循环也就起不到作用,
如果你想读取指定行数,并打印行数,这样写比较合适
import java.io.*;
public class test {
public static void main(String[] args) throws IOException{
File file =new File("a.txt"); //随便读取一个文本文件,最好文件大一点才会出现问题
FileInputStream fis =new FileInputStream(file);
InputStreamReader isr =new InputStreamReader(fis);
BufferedReader bis = new BufferedReader(isr);
for (int i=0,b=1;i<10 ;i++,b++ )
{
//if(i==5){break;}
System.out.println(b+".\t"+bis.readLine()); //这里会打印出null ,为什么 ,怎么解决
}
}
}
复制代码
作者:
杜佳瑞
时间:
2012-8-14 00:51
import java.io.*;
class DemoTest1
{
public static void main(String[] args) throws IOException
{
File file =new File("Test2.java"); //随便读取一个文本文件,最好文件大一点才会出现问题
int b =1;
int i=0;
int a =0;
FileInputStream fis =new FileInputStream(file);
InputStreamReader isr =new InputStreamReader(fis);
while(i<10)
{
while(a<10)
{
BufferedReader bis = new BufferedReader(isr
);//这里每次循环都会创建一个新的缓冲区,虽然我不知道这原理是什么,但肯定得放到外面。
System.out.println(bis.readLine()+" "+(b++)
+"..."+i); 我这里面加了点东西,结果可以看出前5次打印i=0,后5次i=1,所以我想不通楼主下面那个判断是干吗用的。对整个结果没有任何影响
a++;
if(a==5)//
break;
}
i++;
}
}
}
作者:
杨习平
时间:
2012-8-14 02:02
public class Demo {
public static void main(String[] args) throws IOException{
File file =new File("file/a.txt"); //随便读取一个文本文件,最好文件大一点才会出现问题
int b =1;
int i=0;
int a =0;
FileInputStream fis =new FileInputStream(file);
InputStreamReader isr =new InputStreamReader(fis);
while(i<10){
while(a<10){
BufferedReader bis = new BufferedReader(isr);
while(bis.readLine()!=null){//我在这里改进了一下,你看看吧,合不合你的想法
System.out.println(bis.readLine() + " " + b++);
}
a++;
if(a==5){break;}
}
i++;
}
}
}
作者:
余明辉
时间:
2012-8-14 23:33
我也是网上看到的一个题目,自己一直没有想明白为什么会出现这种问题。我的解决方法也是把new BufferedReader放在循环外面,听人说如果放在循环里面的话,第一次可以读,但是第二次的话,java有个保护机制,就不允许再读了,所以后面输出的全部都是null。
问题已经解决
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2