java第十七天(IO流,字符输入流,字符输出流)

81.IO流

556d4d5d5c108ab5883d65d02c03d870b20.jpg

IO(Input/Output):输入和输出,指的是某个设备或环境进行数据的输入或者输出。例如:键盘的输入,再比如显示器就是输出设备,输出图像。

对于java来说输入输出问题,java将它抽象成流对象来解决。

以游戏程序为中心读取文件就是输入,写入文件是输出。

IO流在java中从输入输出角度分类:

1.输入流

2.输出流

IO流在java中从数据的角度来分类:

1.字符流

文本,我们能读的懂的都可以认为是字符流。比如:文章,java文件等等

2.字节流

二进制的数据,这种数据一般用文本打开我们读不懂。比如,图片文件,mp3文件,等等。

82.字符流

文本,我们能读的懂的都可以认为是字符流。比如:文章,java文件等等字符流

(1)字符输出流

字符输出流命名规则以Writer结尾

51b130cc75e30426d126d39105a21e4a464.jpg

d68475c380d1a387376df52948e8f4d84b0.jpg

308020674132ff78e9a10da5faa16e7dc37.jpg

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class IOTest {
    public static void main(String[] args) {
        //创建一个文件
        File file = new File("aa.txt");
        //先创建一个输出为null
        Writer writer=null;
        IO流是需要关闭的,如果不这样设计就不能关闭资源
        try {
            //在文件中写
            writer = new FileWriter(file);
            //写的内容是"HelloWorld!",每次修改都会自动覆盖上一次写的内容
            writer.write("HelloWorld!");
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //判断writer不是空防止空指针异常
            if(writer!=null){
                try {
                    //在关闭前会做flush刷新的事情
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class IOTest1 {
    public static void main(String[] args) {
        //先创建一个输出为null
        Writer writer=null;
        IO流是需要关闭的,如果不这样设计就不能关闭资源
        try {
            //在新建的file文件中写
            writer = new FileWriter(new File("bb.txt"));
            //写的内容是"HelloWorld!"
            writer.write("HelloWorld!");
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //判断writer不是空防止空指针异常
            if(writer!=null){
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

追加

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class IOTest1 {
    public static void main(String[] args) {
        File file = new File("aa.txt");
        //先创建一个输出为null
        Writer writer=null;
        IO流是需要关闭的,如果不这样设计就不能关闭资源
        try {
            //在file文件中写,后面是true,表示再写的内容是追加不是覆盖
            writer = new FileWriter(file,true);
            //写的内容是"HelloWorld!"
            writer.write("HelloWorld!");
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //判断writer不是空防止空指针异常
            if(writer!=null){
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

换行:

输出换行

把文本写入文件中\n代表换行

问题是不同的环境下换行的方式也不一样

Windows: \r\n

Linux:\n

Mac:\r

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class IOTest2 {
    public static void main(String[] args) {
        //先创建一个输出为null
        Writer writer=null;
        IO流是需要关闭的,如果不这样设计就不能关闭资源
        try {
            //在新建的file文件中写
            writer = new FileWriter(new File("aa.txt"),true);
            for (int i = 0; i < 100; i++) {
                //写的内容是"HelloWorld!"
                /*把文本写入文件中\n代表换行
                        问题是不同的环境下换行的方式也不一样
                Windows: \r\n
                Linux:\n
                Mac:\r
*/
                writer.write("HelloWorld!\r\n");
                每次写入10个helloworld的时候做一次flush
                if(i % 10 == 0){
                    writer.flush();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //判断writer不是空防止空指针异常
            if(writer!=null){
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

写入的五种方法

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class IOTest3 {
    public static void main(String[] args) {
        //先创建一个输出为null
        Writer writer=null;
        IO流是需要关闭的,如果不这样设计就不能关闭资源
        try {
            //在新建的file文件中写
            writer = new FileWriter(new File("bb.txt"));
            //写的内容是"HelloWorld!"
            writer.write("HelloWorld!");
            //写入单个字符
            writer.write(98);//b
            writer.write('A');
            //写入字符数组
            writer.write(new char[]{'l','o','v','e'});
            //写入字符串的一部分
            writer.write("如今这宋老三\t",2,3);
            //写入字符数组的一部分
            writer.write(new char[]{'我','不','喜','欢','这','世','界','我','只','喜','欢','你'},0,7);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //判断writer不是空防止空指针异常
            if(writer!=null){
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

(2)字符输入流

字符输出流命名规则以Reader结尾

单个字符读取

import java.io.*;

public class ReaderTest {
    public static void main(String[] args) {
        //创建一个文件
        File file = new File("aa.txt");
        Reader reader=null;
        //创建一个输入流对象
        try {
            reader=new FileReader(file);
            //这里read()出现的异常将下面catch (FileNotFoundException e)改成 catch (Exception e)就可以了
            int read = -1;
            read=reader.read();
            System.out.println((char)read);
            read=reader.read();
            System.out.println((char)read);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭资源
            if(reader!=null){
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

27f0e7ecd6749a3d84dac228fd9b3fc453c.jpg

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class ReaderTest1 {
    public static void main(String[] args) {
        //创建一个文件
        File file = new File("aa.txt");
        Reader reader=null;
        //创建一个输入流对象
        try {
            reader=new FileReader(file);
            //这里read()出现的异常将下面catch (FileNotFoundException e)改成 catch (Exception e)就可以了
            int read = 0;
            //单个读取性能低
            while ((read=reader.read())!=-1){
                System.out.print((char)read);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭资源
            if(reader!=null){
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

78d7c53de81b260f5d2bd184f266fc7db29.jpg

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.Arrays;

public class ReaderTest2 {
    public static void main(String[] args) {
        //创建一个文件
        File file = new File("aa.txt");
        Reader reader=null;
        //创建一个输入流对象
        try {
            reader=new FileReader(file);
            //这里read()出现的异常将下面catch (FileNotFoundException e)改成 catch (Exception e)就可以了
            char[] c=new char[12];
            //向字符数组中添数据
            int len = reader.read(c);
            System.out.println("读取的长度是"+len+"   读取的内容是"+ Arrays.toString(c));
            len = reader.read(c);
            System.out.println("读取的长度是"+len+"   读取的内容是"+ Arrays.toString(c));
            len = reader.read(c);
            System.out.println("读取的长度是"+len+"   读取的内容是"+ Arrays.toString(c));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭资源
            if(reader!=null){
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

f9d50398359a84a664e62d1eda722a18350.jpg

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class ReaderTest3 {
    public static void main(String[] args) {
        //创建一个文件
        File file = new File("aa.txt");
        Reader reader=null;
        //创建一个输入流对象
        try {
            reader=new FileReader(file);
            //这里read()出现的异常将下面catch (FileNotFoundException e)改成 catch (Exception e)就可以了
            int len = 1;
            char[] c=new char[12];
            while((len=reader.read(c))!=-1){
                String str= String.valueOf(c,0,len);
                System.out.print(str);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //关闭资源
            if(reader!=null){
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

 

转载于:https://my.oschina.net/u/4110331/blog/3051584

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值