FileIO

一、BufferedInputStream与BufferedOutputStream

package com.foresealife.lams.common;

import java.io.*;

public class Test {
    public static void main(String[] args){
        try {
            InputStream  in = new BufferedInputStream(new FileInputStream(new File("C:\\Users\\\\Desktop\\测试.txt")));
            OutputStream  out = new BufferedOutputStream(new FileOutputStream(new File("C:\\Users\\\\Desktop\\测试11111.txt"), true)); // 添加“true”可以在文件后面续写,不写则默认为false覆盖原有的内容
            byte[] bytes = new byte[1024];
            long time1=System.currentTimeMillis();
            int len;
            String newLine = System.getProperty("line.separator");
            while ((len = in.read(bytes)) != -1){
                //Unix下的换行符为"\n"			
            out.write("\n".getBytes());						
            //Windows下的换行符为"\r\n"			
            out.write("\r\n".getBytes()); 						
            //推荐使用,具有良好的跨平台性			
            String newLine = System.getProperty("line.separator");			 
            out.write(newLine.getBytes());
                out.write(bytes, 0, bytes.length);
            }
//            out.flush();
            out.close();
            long time2=System.currentTimeMillis();
            System.out.println("缓冲区复制用时:"+(time2-time1)+"毫秒");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

二、bufferedReader 与bufferedWriter

public class Test {
    public static void main(String[] args){
        try {
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\Users\\000\\Desktop\\测试.txt"), "gbk")); // "gbk"解决中文乱码问题
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("C:\\Users\\000\\Desktop\\测试11111.txt"), true);// 添加“true”可以在文件后面续写,不写则默认为false覆盖原有的内容
            String str;
            while ((str=bufferedReader.readLine())!=null){ 读取一行
                System.out.println(str);
                bufferedWriter.write(str);
                bufferedWriter.newLine(); // 换行
            }
            bufferedReader.close();
            bufferedWriter.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

readeLine()方法会逐个读取字符,当读到回车‘\r’或’\n’会将读到的字符作为一行的内容返回。

三、LineNumberReader 这是jdk提供可以跟踪行号的输入流, 是BufferedReader的直接自子类, 在读到换行符’\n’或回车符’\r’或回车符后紧跟换行符,会将行号自动加1。

public static void main(String[] args){
        try {
            LineNumberReader lineNumberReader = new LineNumberReader(new InputStreamReader(new FileInputStream("C:\\Users\\22\\Desktop\\测试.txt"), "gbk"));
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("C:\\Users\\22\\Desktop\\测试11111.txt"));
            lineNumberReader.setLineNumber(0);
            String str;
            while ((str=lineNumberReader.readLine())!= null){
                bufferedWriter.write(lineNumberReader.getLineNumber()+":"+str);
                bufferedWriter.newLine();
            }
            lineNumberReader.close();
            bufferedWriter.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

效果:
输入文件:
在这里插入图片描述
输出文件:
在这里插入图片描述
四、inputStreamReader 和OutputStreamWriter 为转换流, 可以见将字节流转换为字符流,包装类,只能针对文本文件字节流进行转换, 如果字节流是一张图片,此时转换为字符流会造成数据损失。

public static void main(String[] args){
    try {
        InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("C:\\Users\\22\\Desktop\\测试.txt"), "gbk");
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream("C:\\Users\\22\\Desktop\\测试11111.txt"));
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
        String str;
        while ((str=bufferedReader.readLine())!= null){
            bufferedWriter.write(str);
            bufferedWriter.newLine();
        }
        bufferedReader.close();
        bufferedWriter.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值