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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 记得上线 初级黑马   /  2012-7-20 12:02  /  1994 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 记得上线 于 2012-7-20 13:48 编辑

import java.io.*;
/*需求 :制作一个能够返回文件行数的缓冲输入流
        1 先编写一缓冲输入流。
        2 缓冲输入流内部的字符串容器返回字符串的同时也返回行数。
        
*/
class MyLineNumberReaderDemo
{
        private FileReader f;
        
        MyLineNumberReaderDemo(FileReader f)
        {
                this.f=f;
        }
        public  String MyLine()throws IOException
        {
                StringBuilder sb=new StringBulider();
                int ch=null;
                int line=0;
                while((ch=f.read())!=-1)
                {
                        if(ch=='\r')
                                continue;
                        if(ch=='\n')
                        {
                                return line+sb.toString();//返回字符串的时候

同时返回计数line。
                                line++;//没返一次line的同时也自增一次。
                        }
                        sb.append((char)ch);
                }
                if(sb.length()!=0)
                        return line+sb.String;
                return null;
        }
        public void myClose()throws IOException
        {
                f.close();
        }
}        
class MyLineDemo
{
        public static void main(String[] args)throws IOException
        {
                 FileReader f=new FileReader("buf.txt");
                MyLineNumberReaderDemo mline=new MyLineNumberReaderDemo(f);
                while((String my=mline.MyLine())!=null)//报错的地方
                {
                        System.out.println(my);
                }               
                mline.myClose();
        }
}

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 rslheima 于 2012-7-20 12:55 编辑

给你改了好多喔。。。看来你需要仔细点了!!
import java.io.*;
/*需求 :制作一个能够返回文件行数的缓冲输入流
        1 先编写一缓冲输入流。
        2 缓冲输入流内部的字符串容器返回字符串的同时也返回行数。

*/
class MyLineNumberReaderDemo
{
        private FileReader f;

       int line=0;//行号开始为1,多好
        MyLineNumberReaderDemo(FileReader f)
        {
                this.f=f;
        }
        public  String MyLine()throws IOException
        {
                StringBuilder sb=new StringBuilder();//--------这拼写错误
                int ch=0;//------整数初值不能为null
                while((ch=f.read())!=-1)
                {
                        if(ch=='\r')
                                continue;
                        if(ch=='\n')
                        {                 line++;//写在return前边。
                                return line+": "+sb.toString();//返回字符串的时候同时返回计数line。

                        }else//这用else
                        sb.append((char)ch);
                }
                if(sb.length()!=0)
                        return line+sb.toString();//拼写错啦!!
                return null;
        }
        public void myClose()throws IOException
        {
                f.close();
        }
}      
class MyLineDemo
{
        public static void main(String[] args)throws IOException
        {
                 FileReader f=new FileReader("src\\MyLineDemo.java");
                MyLineNumberReaderDemo mline=new MyLineNumberReaderDemo(f);
                String my=null;//把my提出来定义
                while(( my =mline.MyLine())!=null)//报错的地方
                {
                        System.out.println(my);
                }               
                mline.myClose();
        }
}


评分

参与人数 1黑马币 +3 收起 理由
记得上线 + 3

查看全部评分

回复 使用道具 举报
import java.io.*;
/*需求 :制作一个能够返回文件行数的缓冲输入流
        1 先编写一缓冲输入流。
        2 缓冲输入流内部的字符串容器返回字符串的同时也返回行数。
        
*/
class MyLineNumberReaderDemo
{
        private FileReader f;
        
        MyLineNumberReaderDemo(FileReader f)
        {
                this.f=f;
        }
        public  String MyLine()throws IOException
        {
                StringBuilder sb=new StringBuilder();
                int ch=-1;
               int line=0;
                while((ch=f.read())!=-1)
                {
                        if(ch=='\r')
                                continue;
                        if(ch=='\n')
                        {
                                   line++;//应该写在这个位置
                               return line+sb.toString();//返回字符串的时候

//同时返回计数line。
                                //line++;//没返一次line的同时也自增一次。
                        }
                        sb.append((char)ch);
                }
                if(sb.length()!=0)
                        return line+sb.toString();
                return null;
        }
        public void myClose()throws IOException
        {
                f.close();
        }
}        
class MyLineDemo
{
        public static void main(String[] args)throws IOException
        {
                 FileReader f=new FileReader("buf.txt");
                MyLineNumberReaderDemo mline=new MyLineNumberReaderDemo(f);
                String my=null;
                while((my=mline.MyLine())!=null)//报错的地方
                {
                        System.out.println(my);
                }               
                mline.myClose();
        }
}
回复 使用道具 举报
import java.io.*;
/*需求 :制作一个能够返回文件行数的缓冲输入流
        1 先编写一缓冲输入流。
        2 缓冲输入流内部的字符串容器返回字符串的同时也返回行数。
        
*/
class MyLineNumberReaderDemo
{
        private FileReader f;
        
        MyLineNumberReaderDemo(FileReader f)
        {
                this.f=f;
        }
        public  String MyLine()throws IOException
        {
                StringBuilder sb=new StringBulider();---c此处拼写有误,应该是StringBuilder                 

                int ch=null;   //个么,int是整数类型,只能赋值为数字。  改为:int ch= 0;或者  int ch;如果你声明 的时候没有赋值,系统默认的值是0.                int line=0;
                while((ch=f.read())!=-1)
                {
                        if(ch=='\r')
                                continue;
                        if(ch=='\n')
                        {
                                return line+sb.toString();//返回字符串的时候同时返回计数line。
                                line++;//没返一次line的同时也自增一次。----此处出错了,因为如果此句话没有读到那么行号就不会变,读到上面的/r此次循环就已经结束了继续下一次循环,所以line不会加一,行号就会错。
                                应该把line放在第一个if的前面,让它作用于整个循环
                        }
                        sb.append((char)ch);
                }
                if(sb.length()!=0)
                        return line+sb.String;
                return null;
        }
        public void myClose()throws IOException
        {
                f.close();
        }
}        
public class test1
{
        public static void main(String[] args)throws IOException
        {
                 FileReader f=new FileReader("buf.txt");
                MyLineNumberReaderDemo mline=new MyLineNumberReaderDemo(f);
               
                String my = null;               
                while(( /*这里的String 要移出去,不能一边声明一边赋值*/ my=mline.MyLine())!=null)//报错的地方
                {
                        System.out.println(my);
                }               
                mline.myClose();
        }
}

评分

参与人数 1黑马币 +3 收起 理由
记得上线 + 3

查看全部评分

回复 使用道具 举报
import java.io.*;
class MainClass
{
        public static void main(String[] args) throws IOException
        {
                 reader(new FileReader("DuoTaiDemo2.java"));
        }
        public static void reader(FileReader f) throws IOException
        {
                BufferedReader buf = new BufferedReader(f);
                String line = null;
                int lineNum = 1;
                while((line=buf.readLine())!=null){
                        System.out.println((lineNum++)+line);
                }
                buf.close();
        }
}

制作一个能够返回文件行数的缓冲输入流
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马