JAVA入门—————IO流 ———字节流——FileOutputStream—BufferedOutputStream

IO流

  • 概念:IO流用来处理设备之间的数据传输
    JAVA对数据的操作是通过流的方式实现的
  • 分类
    • 内存角度:
  •       输入流   ——   读入数据
    
  •   	  输出流   ——   写出数据
    
    • 数据类型
  •       字节流  ————  可以读写任何类型的文件    eg:音频 文本
    
  •       字符流  ———— 只能读写文本文件
    
IO流的基类描述
  • 字节流:InputStream(读) —— OutputStream(写)
  • 具体子类:FileInputStream —— FileOutputStream
  • 字符流:Reader(读)—— Writer(写)
  • 具体子类:FileReader —— FileWriter
    OutputStream是一个抽象类 不能直接实例化 必须找到他的子类————FileOutputStream 进行实例化

字节流 ——FileOutputStream和FileInputStream

FileOutputStream(File file)——传入文件
  • 输出流所关联的文件如果不存在 则系统自动创建
FileOutputStream(String name)——传入文件的路径

用完记得close( ) :通知系统释放关于文件的资源 让IO流对象变成垃圾,等待垃圾回收器对其进行回收

public void write(int b):写一个字节 超过一个字节 砍掉前面的字节
public void write(byte[ ] b):写一个字节数组
public void write(byte[ ] b,int off,int len):写一个字节数组的一部分

Windows下的换行符———— \r\n

Linux下的换行符————\n

eg:	FileOutputStream out = new 	FileOutputStream("a.txt");
        out.write(97);
        out.write(98);
        out.write(99);
        out.write(200);
        byte[] bytes = {100,101,102,103,104,105};
        out.write(bytes);
        out.write("\r\n".getBytes());
        String s = "我不愿失去每一寸泥土";
        out.write(s.getBytes());
        out.close();
FileOutputStream(File file, boolean append)
FileOutputStream(String name, boolean append)
  • 返回true代表追加写入 不会覆盖文件中之前的数据
  FileOutputStream out = new FileOutputStream("a.txt",true);
FileInputStream(File file)———读取文件
  • 输入流所关联的文件如果不存在 则会报错
FileInputStream(String name)————读取文件的名字

用完记得close( ) :通知系统释放关于文件的资源 让IO流对象变成垃圾,等待垃圾回收器对其进行回收

public void read() ————读取一个数据字节。
public void read(byte[ ] b) ————读取一个 byte 数组的字节
eg:	byte[] bytes = new byte[1024];————创建一个字节数组 充当缓冲区
        int read1 = in.read(bytes);————读取缓冲区中的字节数
          System.out.println(read1);————返回的是读到的有效的字节个数
         for (byte aByte : bytes) {
            System.out.println(aByte);————遍历a.txt中每个字节数 1024-len 其余为0
        }
public void read(byte[ ] b, int off, int len) ————读取一个字节数组的一部分
  eg:	FileInputStream in = new FileInputStream("b.txt");
        byte[] bytes = new byte[1024];
        int len = in.read(bytes, 0, 20);————一次读取一部分字节 放进缓冲区中
        System.out.println(len);
        for (byte aByte : bytes) {
            System.out.println(aByte);——————只读取20个字节数 其余为0
        }
        String s = new String(bytes, 0, 10);————把字节数组中的字节数转成字符输出
        System.out.println(s);————————0-20的字节数组转换成字符数组

注:若要将字节数组转换成字符数组,定义字符串时只能在字节数组的范围内转换

  • 当in.read()的值为-1时 说明文本文件中没有内容 没有字节数
eg:    FileOutputStream out1 = new FileOutputStream("c.txt");
        FileInputStream in1 = new FileInputStream("c.txt");
        int read = in1.read();
        System.out.println(read);——————————输出为-1
字节流的文本文件复制
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class demo5 {
    public static void main(String[] args) throws IOException {
        FileInputStream in = new FileInputStream("b.txt");
        FileOutputStream out = new FileOutputStream("C:\\Users\\ZY\\Desktop\\b.txt");
        int len = 0;
        while((len = in.read())!=-1){
            out.write(len);————————在赋值的文件中写出读取的第一个字节数组
            //out.flush();
        }
        in.close();
        out.close();
        System.out.println("复制完成");
    }
}
字节流的音频文件的复制
————————————一次读取一个字节 一次复制一个字节  
import java.io.*;
public class demo6 {
    public static void main(String[] args) throws IOException {
        FileInputStream in = new FileInputStream("C:\\Users\\ZY\\Desktop\\Blow Fever - 旋转椅 (Live).mp3");//封装文件
        FileOutputStream out = new FileOutputStream("C:\\Users\\ZY\\Desktop\\Blow Fever-旋转椅.mp3");//所复制的新文件
        int len = 0;
        long start = System.currentTimeMillis();
        while((len = in.read())!=-1){
            out.write(len);
            out.flush();
        }
        long end = System.currentTimeMillis();
        in.close();
        out.close();
        System.out.println("复制完成 共耗时"+(end-start)+"毫秒");————输出:复制完成 共耗时54040毫秒
    }
}

高效率复制——————创建一个字节数组 读取并赋值

————————————一次读取一个字节数组的大小 1024*8 并复制 
import java.io.*;
public class demo7 {
    public static void main(String[] args) throws IOException {
        File file = new File("C:\\Users\\ZY\\Desktop\\Blow Fever - 旋转椅 (Live).mp3");
        FileInputStream in = new FileInputStream(file);
        FileOutputStream out = new FileOutputStream("C:\\Users\\ZY\\Desktop\\photo\\" + file.getName());
        byte[] bytes = new byte[1024 * 8];————————创建一个字节数组 
        int len = 0;
        long start = System.currentTimeMillis();
        while ((len = in.read(bytes))!=-1){
            out.write(bytes,0,len);——————————一次读取1024*8个字节数并赋值
        }
        long end = System.currentTimeMillis();
        System.out.println("复制完成 共耗时"+(end-start)+"毫秒");——————输出:
复制完成 共耗时22毫秒
        in.close();
        out.close();
    }
}

抓取异常

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class demo8 {
    public static void main(String[] args) {
        FileInputStream in = null;
        FileOutputStream out = null;
        try{
            File file = new File("C:\\Users\\ZY\\Desktop\\ICE - ICE (Live).mp3");
            in = new FileInputStream(file);
            out = new FileOutputStream("C:\\Users\\ZY\\Desktop\\JAVA练习文件\\"+file.getName());
            int len = 0;
            byte[] bytes = new byte[1024 * 8];
            while ((len = in.read(bytes))!=-1){
                out.write(bytes,0,len);
            }
            System.out.println("复制完成!");
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try{
                if(in!=null){
                    in.close();
                }
                if(out!=null){
                    out.close();
                }
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
}
BufferedOutputStream———高效输出流

字节缓冲流:给基本的字节流一个包装 使其更高效的读写 需要接受一个基本字节FileInputStream流对象

  • OutputStream的子子类
  • 概念:实现缓冲的输出流。通过设置这种输出流,应用程序可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统
BufferedInputStream———高效输入流

不用自己创建字节数组重放缓冲流 自带缓冲流

BufferedInputStream(InputStream in)——创建缓冲输入流in
BufferedInputStream(InputStream in, int size)——创建缓冲输入流in(可指定缓冲区大小)
BufferedOutputStream(OutputStream out)——创建缓冲输出流
import java.io.*;
public class demo9 {
    public static void main(String[] args) throws IOException {
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("C:\\Users\\ZY\\Desktop\\潘玮柏 _ G.E.M. 邓紫棋 _ 艾热 - 攀登 (Live).mp3"),1024*8);
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("C:\\Users\\ZY\\Desktop\\JAVA练习文件\\攀登 (Live).mp3"));
        byte[] bytes = new byte[1024 * 8];
        int len = 0;
        long start = System.currentTimeMillis();
        while((len = bis.read(bytes))!=-1){
            bos.write(bytes,0 ,len);
        }
        long end = System.currentTimeMillis();
        bis.close();
        bos.close();
        System.out.println("复制完成 共耗时"+(end-start)+"毫秒");
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值