java IO流的典型应用

java的IO流种类繁多,并不是所有的IO类都非常重要,因此我在这里总结了几个常用的IO流使用方法

输入输出流

字符型输入输出流

下面这个例子使用了五种流,分别为BufferedReader,StringReader,PrintWriter,BufferedWriter,FileWriter
作用分别是

作用
StringReader接收一个字符串作为构造参数,提供读取该字符串的方法
BufferedReader将要读取的数据缓存在内存中
FileWriter向文件中写入字符型数据
BufferedWriter将数据缓存在缓冲区中,缓冲区满后一次性将缓冲区数据写入到文件
PrintWriter装饰Writer,提供更多的输出方法
public void test() throws IOException {
    try (BufferedReader in = new BufferedReader(new StringReader(STRING));
         PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("F:\\reference\\temp\\doc5.txt")))) {
        String line = null;
        int count = 0;
        while ((line = in.readLine()) != null) {
            out.println(++count + ":" + line );
        }
    }
}

Steram型输入输出流

Stream与上述reader型输入输出流类似
读出数据的顺序必须与写入数据的顺序一致

try (DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("F:\\reference\\temp\\doc6.txt")));
     DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream("F:\\reference\\temp\\doc6.txt")))) {
    out.writeDouble(3.14);
    out.writeUTF("Hello World");
    out.writeInt(2017);
    out.writeUTF("Hello world");
    out.close();
    System.out.println(in.readDouble());
    System.out.println(in.readUTF());
    System.out.println(in.readInt());
    System.out.println(in.readUTF());
} catch (IOException e) {
    e.printStackTrace();
}

stream与byte[]相互转化

Stream转化为byte[]

public static byte[] readStream(InputStream in) throws IOException {
    try (ByteArrayOutputStream out = new ByteArrayOutputStream();) {
        byte[] buffer = new byte[8192];
        int len = -1;
        while ((len = in.read(buffer)) > 0) {
            out.write(buffer, 0, len);
        }
        return out.toByteArray();
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

byte[]转化为stream

byte[] buff = ...
ByteArrayInputStream in = new ByteArrayInputStream(buff);

缓存流

reader形式的缓存流

缓存流的目的是加快读取速度,下面这个例子是从命令行中读取文件路径,然后利用缓存流输出文件

public static String getString(String filename) {
    try (BufferedReader in = new BufferedReader(new FileReader(filename));) {
        String s;
        StringBuilder sb = new StringBuilder();
        while ((s = in.readLine()) != null) {
            sb.append(s + "\n");
        }
        System.out.println(sb.toString());
        return sb.toString();
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

读取命令行

System.out.println("请输入文件路径");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String filename = br.readLine();
getString(filename);

stream形式的缓存流

public void streamBuffer2() throws IOException {
    BufferedInputStream in = new BufferedInputStream(new FileInputStream("F:\\idea_java\\myjava\\src\\main\\java\\com\\java\\basics\\bit\\Main.java"));
    byte[]buff=new byte[8192];
    int count=-1;
    while((count=in.read(buff))>0){
        String string=new String(buff,0,count, Charset.forName("UTF-8"));
        System.out.println(string);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值