初学 I/O (一)

File
File能代表一个特定的文件的名称,也能代表一个目录下的一组文件的名称
不仅能代表存在的文件或目录,也可以创建新的目录和文件,还可以查看文件的特性,删除。巨多方法参见jdk文档

输入输出
InputStream或Reader派生而来的类都有个reader()方法,OutStream或Writer派生而来的类都有write()方法,用于单个或数组字节输入和输出,一般很少用单一的类来创建,而是叠加使用,就是装饰器
– InputStream 类型
ByteArrayInpuStream
StringBufferInputSteram
FileInputStream
PipedInputStream
SequenceInputStream
FilterInputStream

– OutputStream 类型
ByteArrayOutStream
FileOutStream
PipedOutStream
FilterOutStream
具体用法jdk查


FilterInputStream从InputStream 读取数据

DataInputStream 可以从流中基本数据类型
BufferedInputStream 使用缓冲区
LinNumberInputStream 跟踪流中的行号,getLineNumber();
PushbackInputStream ??弹出一个字节的缓冲区??

FilterOutStream向OutStream写数据
DataOutStream 可以从流中基本数据类型
PrintStream 产生格式化输出
BufferedOutStream 使用缓存,可以使用fulsh清空缓存


stream结尾都是字节流,reader和writer结尾都是字符流,两者的区别就是读写的时候一个是按字节读写,一个是按字符。实际使用通常差不多。在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。只是读写文件,和文件内容无关的,一般选择字节流。复制文件,图片,mp3,mp4都用字节流来读取就行但是若要获取文件内容,比如txt里面的文字,就要用字符流来读取

缓冲流
– BufferedReader
BufferedReader在实现时通过提供一个readLine方法,使用数组或者stringBuilder存储一行数据,并一次性返回

– BufferedWriter

– BufferedInputStream
BufferedInputStream在实现的时候是在自身read方法中提供缓存,是一次取1024或更多字节然后再慢慢读,一个个的返回,它并没有实现读一行的方法

– BufferedOutputStream

BufferedReader,BufferedWriter缓冲输入文件

package testfile;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.LinkedList;

public class BufferedInputFile {


    public static String read (String filename) throws IOException{
        BufferedReader in = new BufferedReader( new FileReader(filename));
        String s;
        LinkedList<String> linkedList = new LinkedList<String>();
        int i = 1;
        //in.readLine都不到东西会返回一个null
        while((s = in.readLine()) != null)
        {
            linkedList.add(s);
        }
        in.close();
        //缓冲有默认的大小,一般情况是够用的
        BufferedWriter out = new BufferedWriter(
                                new FileWriter("E:/ddd.txt"),1024);
        for (String str : linkedList) {
            out.write(i++ + "--" + str);
            out.newLine();
        }
        out.flush();///关闭前必须刷新
        out.close();
        return "OK";
    }

    public static void main(String[] args) throws IOException {
        tim();

    }

    public static void tim() throws IOException{
        long startMili=System.currentTimeMillis();// 当前时间对应的毫秒数
        System.out.println("开始 " + startMili);

        System.out.println(read("E:/sss.txt"));

        long endMili=System.currentTimeMillis();
        System.out.println("结束 s" + endMili);
        System.out.println("总耗时为:" + (endMili - startMili)+"毫秒");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值