博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java I/O流典型使用案例
阅读量:5101 次
发布时间:2019-06-13

本文共 5790 字,大约阅读时间需要 19 分钟。

管道流(多线程程序)

/** 创建数据输出线程* */class ThreadOut extends Thread{    private PipedInputStream in;    private PipedOutputStream out;    public ThreadOut(PipedInputStream in,PipedOutputStream out){        this.in = in;        this.out = out;    }    public void run(){        byte[] bytes = {1,2,3};        try {            out.write(bytes);        } catch (IOException e) {            e.printStackTrace();        }    }}/** 创建数据输入线程* */class ThreadIn extends Thread{    private PipedInputStream in;    private PipedOutputStream out;    public ThreadIn(PipedInputStream in,PipedOutputStream out){        this.in = in;        this.out = out;    }    public void run(){        try {            while(in.available()>0){                int b = in.read();                System.out.print((byte)b);            }        } catch (IOException e) {            e.printStackTrace();        }    }}
PipedInputStream in = new PipedInputStream();        PipedOutputStream out = new PipedOutputStream();        /*        * 连接管道输入输出流        * */        in.connect(out);        new ThreadOut(in,out).start();        new ThreadIn(in,out).start();        /*        * Output:        * 123        * */

 

顺序流(合并流)

/** 创建实现Enumeration接口的类* 该类产生多个InputStream流* SequenceInputStream的构造函数可以接受实现Enumeration的类为参数* */class FileList implements Enumeration{    private String MyFilesList[];    private int current = 0;    public FileList(String MyFilesList[]){        this.MyFilesList = MyFilesList;    }    @Override    public boolean hasMoreElements() {        if(MyFilesList ==null)            return false;        if(current
String [] filestr = {"123.txt","456.txt"};        FileList fileList = new FileList(filestr);        SequenceInputStream in =new SequenceInputStream(fileList);        int len = -1;        byte [] bytes = new byte[1024];        while(in.read(bytes)!=-1){            System.out.println(new String(bytes));        }        /*        * Output:        * Frist file         * Second file         * */

 

缓冲流(以字符流举例)

/** 利用缓冲流读取整行数据。* */        BufferedReader in = new BufferedReader(new FileReader("456.txt"));        StringBuffer str = new StringBuffer();        String s3=null;        while((s3 = in.readLine())!=null){            str.append(s3);        }        System.out.println(str);        /*        * Output:        * Second file        * */

 

字节数组流

byte[] bytes = {1,2,3};        /*        * 将数据存储到字节数组流中的字节数组中        * 此时字节数组流可看做是一个字节数组来使用        * */        ByteArrayOutputStream out = new ByteArrayOutputStream();        out.write(bytes);        /*        * 通过字节数组输出流获取字节数组到输入流中写出        * */        ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());        while (in.available()>0) {            byte b = (byte) in.read();            System.out.print(b);        }        /*        * Output:        * 123        * */        /*        * StringReader、StringWriter和数组流有相同的使用方法        * */        String s1 = "I love you";        String s2 = null;        StringReader strin = new StringReader(s1);        StringWriter strout = new StringWriter();        strout.write(s1);        strout.append(s1);        s2 = strout.toString();          System.out.println(s2);        /*        *Output:        * I love youI love you        * */

 

基本类型流

/** 基本类型流* 基本类型输入输出流要搭配起来使用才有意义* 在读写中要知道相应的顺序才能得到正确的结果* */    DataOutputStream out = new DataOutputStream(new FileOutputStream("456.txt"));    DataInputStream in = new DataInputStream(new FileInputStream("456.txt"));    byte b = 1;    int i = 2;    double d = 3.05;    char c = 'a';    float f = 4.05f;    String s = "abcdefg";    out.writeByte(b);    out.writeUTF(s);    out.writeChar(c);    out.writeDouble(d);    out.writeFloat(f);    out.writeInt(i);    System.out.println(in.readByte());    System.out.println(in.readUTF());    System.out.println(in.readChar());    System.out.println(in.readDouble());    System.out.println(in.readFloat());    System.out.println(in.readInt());/** Output:* 1*abcdefg*a*3.05*4.05*2* */

 

打印流

/** PrintWriter实现了PrintStream所有的方法* PrintWriter可以接受一个Outputstream对象作为一个参数* PrintWriter可以直接对文件进行写入操作* PrintWriter内置了缓冲,可以使用flush()清空缓冲,也可以使构造器的第二个参数为true实现自动刷新* System.out是PrintStream。* */        PrintStream out1 = System.out;        out1.printf("输出一串数字%d\n",123456);        PrintWriter out2 = new PrintWriter(System.out,true);        out2.printf("输出一串数字%d",456789);        /*        * Output:        * 输出一串数字123456        * 输出一串数字456789        * */        PrintWriter out3 = new PrintWriter("123.txt");        out3.printf("%s直接对文件进行操作!","PrintWriter可以");        out3.flush();

 

读写随机访问文件流

import java.io.*;public class TestIO {    static void show() throws IOException {        /*         * RandomAccessFile类         * 它不属于InputStream和OutputStream层次体系         * 其本身跟基本类型流实现了通样的接口所以拥有同样的方法和一些特性         * seek()方法可接受一个int参数可以访问到文件中相应的字节位置         * 模式可以为"r","rw"但是不能为"w"只写,因为有写必定有读。         * */        RandomAccessFile rf = new RandomAccessFile("456.txt", "r");        for(int i = 0; i < 7; i++)            System.out.println(                    "序列 " + i + ": " + rf.readDouble());        System.out.println(rf.readUTF());        rf.close();    }    public static void main(String[] args)throws IOException {        RandomAccessFile rf = new RandomAccessFile("456.txt", "rw");        for(int i = 0; i < 7; i++)            rf.writeDouble(i*1.414);        rf.writeUTF("文件浏览结束");        rf.close();        show();        rf = new RandomAccessFile("456.txt", "rw");        rf.seek(5*8);        rf.writeDouble(47.0001);        rf.close();        show();        /*        * Output:序列 0: 0.0序列 1: 1.414序列 2: 2.828序列 3: 4.242序列 4: 5.656序列 5: 7.069999999999999序列 6: 8.484文件浏览结束序列 0: 0.0序列 1: 1.414序列 2: 2.828序列 3: 4.242序列 4: 5.656序列 5: 47.0001序列 6: 8.484文件浏览结束        * */    }}

 

转载于:https://www.cnblogs.com/old-driver-lgq/p/10806269.html

你可能感兴趣的文章
THU的告诫
查看>>
让字体在div容器中垂直居中
查看>>
Android Weekly Notes Issue #221
查看>>
mmap和MappedByteBuffer
查看>>
Linux的基本操作
查看>>
C 算法
查看>>
使用fiddler进程弱网测试
查看>>
jdk path
查看>>
敏捷开发笔记 - 设计
查看>>
我需要在电脑上安装C编译器
查看>>
oracle一次删除多张表
查看>>
H3C 配置CHAP验证
查看>>
H3C ICMP
查看>>
Python Numpy 介绍
查看>>
element对象
查看>>
Android SQLite (一) 数据库简介
查看>>
HashMap和HashSet的区别
查看>>
python-2:基础点滴 字符串函数之一 str
查看>>
5233杨光--第十三周学习总结
查看>>
【Java】Java环境变量配置
查看>>