黑马程序员技术交流社区

标题: io问题 [打印本页]

作者: 邱成    时间: 2012-9-28 23:09
标题: io问题
import java.io.*;

class Test3
{
public static void main(String[] args)
{
  try
  {
   File file=new File(args[0]);
   if (!file.exists())
   {
    System.out.println("该文件不存在");
   }
   else
   {
    FileReader fr=new FileReader(file);
    BufferedReader br=new BufferedReader(fr);
    String s=br.readLine();   
    while (br.readLine()!=null)
    {
     System.out.println(br.readLine());
     s=br.readLine();
    }
    br.close();
    fr.close();
   }
  }
  catch(Exception e)
  {
  }
}
}

为什么这段代码读短的文件没有问题,读长的文件不会把全部文件内容读完??谢谢
作者: 王玉岩    时间: 2012-9-28 23:16
try
  {
   File file=new File(args[0]);//我觉得是这块的问题,如果文件过大的话可能装不下
   if (!file.exists())
   {
    System.out.println("该文件不存在");
   }
   else
   {
    FileReader fr=new FileReader(file);

作者: 郑世光    时间: 2012-9-28 23:48
本帖最后由 郑世光 于 2012-9-29 08:03 编辑

不同意楼上说法,此程序本来有问题。、
楼主是没理解readLine()  方法,每次调用函数就读取一行,返回此行的字符串,再次调用时就读取下一行了
修改如下:

import java.io.*;

public class Test3 {
        public static void main(String[] args) {

                try {
                        File file = new File("G:\\聊天程序.txt");  //我电脑上的文件,请修改,此处只是封装一个File对象,与文件大小无关,只要是纯文本就行
                        if (!file.exists()) {
                                System.out.println("该文件不存在");
                        } else {
                                FileReader fr = new FileReader(file);
                                BufferedReader br = new BufferedReader(fr);
                                String s= null ;
                                while ((s=br.readLine()) != null) {
                                        System.out.println(s);
                                        //s = br.readLine();
                                }
                                br.close();
                                fr.close();
                        }
                } catch (Exception e) {
                }
        }
}
作者: 张飞年    时间: 2012-9-29 00:11
楼主程序有问题啊,应该要注意到readLine()也是一个阻塞式的方法,不是一般的方法。它读一行,操作一行,再回来读一行再操作一行。。。
程序应该为
          。。。
BufferedReader br=new BufferedReader(fr);
    String line = null;                          // String s=br.readLine();   
    while( (line =br.readLine())!=null)   //这里读一行,写一行,再上去读取一行,再写一行。。。
     {                                                  //阻塞式方法就是一直在那执行别的不让过,直到它执行完
      System.out.println(line);                 //System.out.println(br.readLine());如果有很多个readLine()只有这里读取的才会输出
                                                       //  s=br.readLine();
     }
     br.close();
     fr.close();
           。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2