【java】io流之缓冲、数据、输出、转换流基本使用

缓冲流:

/**
 * BufferedReader:
 *      带有缓冲区的字符输入流
 *      使用这个流的时候不需要自定义byte、char数组,自带缓冲
 */
public class BufferedReaderTest01 {
    public static void main(String[] args) throws Exception{
        FileReader reader = new FileReader("wenjian");
        /**
         * 当一个流的构造方法需要一个流的时候,这个被传进来的流叫做:节点流
         * 外部负责包装这个流的叫做:包装流/处理流
         * 如当前程序:FileReader为节点流,BufferedReader为包装流
         */
        BufferedReader br = new BufferedReader(reader);

        //readline()方法返回一个字符串类型
        //如 String s = br.readline();
        //readline()方法读取一个文本行(一行),但不带换行符
        String str = null;
        while((str = br.readLine()) != null){
            System.out.println(str);
        }

        br.close();

    }
}
/**
 *  转换流:InputStreamReader
 *          OutputStreamWriter
 */
public class BufferedReaderTest02 {
    public static void main(String[] args) throws Exception{
        //字节流
        FileInputStream fis = new FileInputStream("wenjian");

        //通过转换流转换(InputStreamReader将字节流转换为字符流)
        //这里fis为节点流,reader为包装流
        InputStreamReader reader = new InputStreamReader(fis);

        //这个构造方法只能传一个字符流,不能传字节流,若需传入字节流,需要先将字节流转换为字符流
        //这里reader为节点流,br为包装流
        BufferedReader br = new BufferedReader(reader);

        //以上代码合并
        BufferedReader br1 = new BufferedReader(new InputStreamReader(new FileInputStream("wenjian")));
    }
}
/**
 * 带有缓冲的字符输出流:bufferedwriter
 */
public class BufferedWriterTest01 {
    public static void main(String[] args) throws Exception {
        BufferedWriter bw = new BufferedWriter(new FileWriter("abc",true));
        bw.write("hahahaha");
        bw.write("nihaoa");

        //刷新
        bw.flush();
        //关闭
        bw.close();
    }
}

数据流:

/**
 * 数据字节输入流:DataInputStream
 * DataOutputStream写的文件,只能使用DataInputStream去读,且读的时候需要直到写入的顺序。
 * 即读的顺序需要和写入的顺序一致,才可正常取出数据。
 */
public class DataInputStreamTest01 {
    public static void main(String[] args) throws Exception{
        DataInputStream dis = new DataInputStream(new FileInputStream("data"));
        //读数据
        short s = dis.readShort();
        int i = dis.readInt();
        String str = dis.readUTF();
        float f = dis.readFloat();

        System.out.println(s);
        System.out.println(i);
        System.out.println(f);
        System.out.println(str);

        dis.close();
    }
}
/**
 * 数据字节输出流:DataOutputStream
 *  这个流可以将数据连同数据的类型一并写入文件。
 *  注意:这个文件不是普通文本文件
 */
public class DataOutputStreamTest01 {
    public static void main(String[] args) throws Exception {
        DataOutputStream dos = new DataOutputStream(new FileOutputStream("data"));
        //写入数据
        short s = 12;
        int i = 100;
        String str = "haha";
        float f = 3.0f;
        //写
        dos.writeShort(s);
        dos.writeInt(i);
        dos.writeUTF(str);
        dos.writeFloat(f);

        dos.flush();
        dos.close();

    }
}

输出流:

**
 * 标准字节输出流(默认输出到后台):PrintStream
 * 标准输出流不需要手动close()关闭
 */
public class PrintStreamTest01 {
    public static void main(String[] args) throws Exception{
        //联合起来写
        //这里默认输出到控制台
        System.out.println("hello word!");

        //分开写
        PrintStream ps = System.out;
        ps.println("hello world");
        ps.println("heihei");
        ps.println("xixi");

        //修改输出方向,输出到log文件当中
        PrintStream ps1 = new PrintStream(new FileOutputStream("log",true));
        System.setOut(ps1);
        //以下不再输出到控制台,即输出搭配log文件中
        System.out.println("asdf");
        System.out.println("123");
        System.out.println("hello world!");

    }
}
/**
 * PrintStream应用:如做 日志工具
 */
public class LogG {
    public static void log(String msg){
        //指向一个日志文件,修改输出方向
        try {
            System.setOut(new PrintStream(new FileOutputStream("log.txt",true)));
            //当前日期时间
            Date nowTime = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String strTime = sdf.format(nowTime);

            System.out.println(strTime + ":" + msg);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        log("调用了xxxx类的某某方法");
        log("调用了PrintStram生成日志");
        log("这是一个日志工具");
        log("用户尝试登录,尝试失败,密码错误或用户名不正确");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值