A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邱成 中级黑马   /  2012-9-28 23:09  /  1934 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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)
  {
  }
}
}

为什么这段代码读短的文件没有问题,读长的文件不会把全部文件内容读完??谢谢

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1 恭喜25分了

查看全部评分

3 个回复

倒序浏览
try
  {
   File file=new File(args[0]);//我觉得是这块的问题,如果文件过大的话可能装不下
   if (!file.exists())
   {
    System.out.println("该文件不存在");
   }
   else
   {
    FileReader fr=new FileReader(file);

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 郑世光 于 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) {
                }
        }
}
回复 使用道具 举报
楼主程序有问题啊,应该要注意到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();
           。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马