IO流

字符流和字节流:
字节流有两个基类:
InputStream
OutputStream

字符流两个基类:
Reader
Writer

先学习一下字符流的特点。
既然Io流是用于操作数据的,那么数据的最常见体现形式是文件。那么先以操作文件为主来演示。

这是IO异常处理的方式:

public class Main {

    public static void main(String[] args) throws IOException
    {
	// write your code here
        //一个FileWriter对象。该对象一被初始化就必须要明确被才做的文件。
        //而且该文件会被创建到指定目录下。如果该目录下已有同名文件,则会被覆盖。
        FileWriter fw=null;
        try {
            fw=new FileWriter("d:\\out.txt");//在try初始化
            //调用write方法,将字符写入到流中,需要抛IO异常
            fw.write("abcde");
        }catch (IOException e)
        {
            System.out.println(e.toString());
        }
        finally
        {
            try {
                if (fw!=null)
                     fw.close();
            }catch (IOException e)
            {
                System.out.println(e.toString());
            }
        }
    }
}

自定义一个类中包含一个功能和readLine一致的方法。来模拟一下BufferedReader

class MyBufferedReader
{
    private FileReader r;
    MyBufferedReader(FileReader r)
    {
        this.r=r;
    }
    //可以一次读一行的方法
    public String myreadline()throws IOException
    {
        StringBuilder sb=new StringBuilder();
        int ch=0;
        while ((ch=r.read())!=-1)
        {
            if (ch=='\r')
                continue;
            if (ch=='\n')
                return sb.toString();
            sb.append((char)ch);
        }
        if (sb.length()!=0)
            return sb.toString();
        return null;
    }
    public void myclose()throws IOException
    {
        r.close();
    }
}

JAVA编程思想上的几个小练习:
练习8.打开一个文本文件,每次读取一行内容。将每行作为一个String读入,并将那个String对象置入一个LinkedList中。按相反的顺序打印出LinkedList中的所有行

    public static void bufferinput()throws IOException
    {
        /*
        为了提高效率,加入缓冲技术,将字符读取流对象作为参数传递给缓冲对象
        的构造函数。
         */
        FileReader fr=new FileReader("C:\\Users\\Wave\\Desktop\\新建文件夹\\kaguya.txt");
        //fr最后不需要关闭
        BufferedReader in=new BufferedReader(fr);
        String s;
        LinkedList lk=new LinkedList();
        StringBuilder sb=new StringBuilder();
        while ((s=in.readLine())!=null)
        //readLine方法返回的时候只返回回车符之前的数据内容,并不返回回车符
        {
            sb.append(s+"\n");
            lk.add(s+"\n");
        }
        in.close();
        formattedinput(lk);
        System.out.print(sb.toString());
        Iterator it=lk.iterator();
        while (it.hasNext())
        {
            s=it.next().toString();
            reverseout(s);
        }
    }
public static void formattedinput(LinkedList lk)throws IOException
{
    BufferedWriter out=new BufferedWriter(new FileWriter(filename));
    String s;
    Iterator it=lk.iterator();
    while (it.hasNext())
    {
        out.write(it.next().toString());
    }
    out.close();
}
public static void reverseout(String s)
{
    char[] s1=s.toCharArray();
    int len=s.length();
    for (int i=len-1;i>0;i--)
    {
        System.out.print(s1[i]);
    }
}

练习17.用TextFile和Map<Character,Integer>创建一个程序,它可以对一个文件中所有不同字符出现的次数进行计数。

    public static void TextFile(FileReader fr)throws IOException
    {
        Map<Character,Integer> m=new HashMap<Character, Integer>();
        BufferedReader br=null;
        int s;
        int count=0;
        char c;
        char[] chs;
        try {
            br=new BufferedReader(fr);
            while ((s=br.read())!=-1)
            {
                c=(char)s;
                if (!(c>='a'&&c<='z'||c>='A'&&c<='Z'))
                {
                    continue;
                }
                Integer value=m.get(c);//获取值
                if (value!=null)
                {
                    count=value;
                }
                count++;
                m.put(c,count);
                count=0;
            }
            System.out.print(m);
        }catch (IOException e)
        {
            System.out.print(e.toString());
        }finally {
            try{
                if (br!=null)
                    br.close();
            }catch (IOException e)
            {
                System.out.print(e.toString());
            }
        }
    }

练习21.接受标准输入并将所有字符转换成大写,
再将结果写入到标准输出流中。将文件的内容重定向到该程序中

public static void changeupper() throws IOException
{
    BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter out=new BufferedWriter(new FileWriter(filename));
    String s,str;
    //标准输入
    while ((s=stdin.readLine())!=null&&s.length()!=0)
    {
        str=s.toUpperCase();
        out.write(str+"\n");
    }
    out.close();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值