IO流的基础操作

这里我们是简单的去熟悉一下字节/字符流对于文件操作,那些网络,其他的子类后面遇见了再说!

这里以文件流的方式去写的,这样比较好方便理解

字节流

字节输出流:InputStream

InutStream是一个抽象类,其他的也是。

public abstract int read() throws IOException;很重要的方法

去读取文件里面的字节,如果读到最后面就返回-1代表读完了。

返回的int的值是(0~255)这里的一个数字代表是一个字节

//把文件里面的东西输出到工作台,这里用了JDK7的特性会自动关闭流的。
//这里方法是需要抛出异常的
public void readFile() throws IOException {
 try(InputStream in = new FileInputStream("文件的路径")){
   //循环去读,一直到返回值是-1退出
   while(true){
     in.read().sout;
     if(in.read()==-1)
     break;
   }
 }
}
/*
这里有一个严重的错误他的read方法是每次读的数据流的下一个字节,你没有用变量去保存字节导致每次都的都是下下个字节
所以这里要拿一个变量去接收他 用图表示比较形象一点
上面不修改了!
*/

read的方法是有重载的,上面的方法是一个一个去读的遇见大的文件是比较慢的。

这里是可以按一个byte数组去读的,一次性可以读多个

int read(byte[] b):一次性读取一个数组的数据

int read(byte[] b, int off, int len):这个数组,oof从哪里开始读,len最读取几个

 public static void readFile() throws IOException {
        try(InputStream in = new FileInputStream("D:/a.txt")){
            byte[] bytes = new byte[13];
            int n;
            //循环去读,一直到返回值是-1退出
            while (( n = in.read(bytes) ) != -1){
                System.out.println("read " + n + " bytes.");
            }
        }
    }
//这里的n代表的是每次读取的字节个数,最多读取去13个

这里可以模拟一个数据去测试,不用真实存在的数据。

好像是自己模拟了一个内存空间,让我们的IO去读那个

ByteArrayInputStream可以在内存中模拟一个InputStream:

字节输入流:OutputStream

基本上同上

public abstract void write(int b) throws IOException;

是写数据到内存里面去的哦。这里的int b 是一个一个去写的。

//写一个,hello,world到D:/a.txt盘下面去。
 public static void writeFile() throws IOException {
        try(OutputStream out = new FileOutputStream("D:/a.txt")){
          //这里注意一下,参数是数字的要转换一下
            out.write("hello,world!".getBytes());
        }
    }

flush()方法,在调用close方法的时候会自动调用这个方法。

当我们写网络里面写数据的时候,系统不可能是这边输出一个网络发送一个。

是先输出到一个缓存里面去,然后等缓存满了在发送到网络。

相当于推动这个管道,当你的马桶堵住了就用flush()通他

字符流

字符读:Reader

这里去读的文件是字符的。

public int read() throws IOException;

这个方法读取字符流的下一个字符,并返回字符表示的int,范围是0~65535。如果已读到末尾,返回-1。

//读name.txt里面的名字打印到控制台
public static void readerFile() throws IOException {
        int n;
        try(FileReader red = new FileReader("D:/name.txt")){
          while((n = red.read()) != -1){
            //这里的n读到的是一个字符代表的数字
            (char)n.sout;
          }
        }
    }

字符写:Writer

这里就是写的,同上
Writer是所有字符输出流的超类,它提供的方法主要有:

写入一个字符(0~65535):void write(int c);
写入字符数组的所有字符:void write(char[] c);
写入String表示的所有字符:void write(String s)。

这里就是一个一个字符的去写

//把小明,写到name.txt文件里面
public static void readerFile() throws IOException {
        try(FileWriter writ = new FileWriter("D:/name.txt")){
          writ.write("小明");
        }
    }
    //这里有一个问题,会覆盖掉前面的内容
    //new FileOutputStream(writ,true); 这样就不会覆盖掉之前的数据

任务:

文件的复制

//特别简单。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值