Java--IO流

IO流

IO流(IO流概述及其分类)

A:IO流概述
	IO流用来处理设备之间的数据传输
	Java对数据的操作是通过流的方式
	Java用于操作流的对象都在IO包中 java.io
B:IO流分类
	a:按照数据流向 站在内存角度
		输入流	读入数据
		输出流	写出数据
	b:按照数据类型
		字节流 可以读写任何类型的文件 比如音频 视频  文本文件
		字符流 只能读写文本文件
		什么情况下使用哪种流呢?
		如果数据所在的文件通过windows自带的记事本打开并能读懂里面的内容,就用字符流。其他用字节流。
		如果你什么都不知道,就用字节流

IO流(IO流基类概述和FileOutputStream的构造方法)

A:IO流基类概述
	a:字节流的抽象基类:
		InputStream ,OutputStream。
	b:字符流的抽象基类:
		Reader , Writer。
	注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
	如:InputStream的子类FileInputStream。
	如:Reader的子类FileReader。
B:FileOutputStream的构造方法
	由一个案例引出使用IO流写数据,由于字节流先出现就先学习字节输出流基类OutputStream,
	使用具体子类FileOutputStream
	Io流的分类:
- (1): 按照流向进行划分
 		输入流
 		输出流
- (2): 按照操作的数据类型进行划分
- 字节流
- 字节输入流	InputStream		读
- 字节输出流	OutputStream	写
- 字符流
- 字符输入流 	Reader			读
- 字符输出流	Writer			写

IO流(FileOutputStream写出数据)

A: 构造方法
	FileOutputStream(File file)
	FileOutputStream(String name)
B:案例演示
	FileOutputStream写出数据
public class MyTest {
    public static void main(String[] args) throws FileNotFoundException {
        File file = new File("a.txt");
        FileOutputStream out = new FileOutputStream(file);

        FileOutputStream out2 = new FileOutputStream("b.txt");

    }
}	
	注意事项:
		创建字节输出流对象了做了几件事情?
		a:调用系统资源创建a.txt文件
	  	b:创建了一个fos对象
	  	c:把fos对象指向这个文件
		为什么一定要close()?

		a: 通知系统释放关于管理a.txt文件的资源
		b: 让Io流对象变成垃圾,等待垃圾回收器对其回收

IO流(FileOutputStream的三个write()方法)

A:FileOutputStream的三个write()方法
	public void write(int b):写一个字节  超过一个字节 砍掉前面的字节
	public void write(byte[] b):写一个字节数组
	public void write(byte[] b,int off,int len):写一个字节数组的一部分
B:案例演示:	FileOutputStream的三个write()方法
public class MyTest {
    public static void main(String[] args) throws IOException {
        FileOutputStream out = new FileOutputStream("a.txt");
        out.write(99);
        out.write(100);
        out.write(120);
        out.write(105);

        String str="我爱你中国";
        byte[] bytes = str.getBytes();
        out.write(bytes);

        String str2="中国加油,武汉加油";
        byte[] bytes1 = str2.getBytes();
        out.write(bytes1,0,18);

        out.close();
    }
}

IO流(FileOutputStream写出数据实现换行和追加写入)

A:案例演示:	FileOutputStream写出数据如何实现数据的换行

		 windows下的换行符只用是 \r\n
		  Linux		\n
 		  Mac		\r

public class MyTest {
    public static void main(String[] args) throws IOException {

        FileOutputStream out = new FileOutputStream("b.txt");
        out.write("沅水通波接武冈,".getBytes());
        out.write("\r\n".getBytes());
        out.write("送君不觉有离伤。".getBytes());
        out.write("\r\n".getBytes());
        out.write("青山一道同云雨,".getBytes());
        out.write("\r\n".getBytes());
        out.write("明月何曾是两乡。".getBytes());

        out.close();

    }
}

B:案例演示:	FileOutputStream写出数据如何实现数据的追加写入

public class MyTest {
    public static void main(String[] args) throws IOException {
        FileOutputStream out = new FileOutputStream("c.txt",true);
        out.write("沅水通波接武岗,".getBytes());
        out.write("\r\n".getBytes());
        out.write("送君不觉有离伤。".getBytes());
        out.write("\r\n".getBytes());
        out.write("青山一道同云雨,".getBytes());
        out.write("\r\n".getBytes());
        out.write("明月何曾是两乡。".getBytes());
        out.write("\r\n".getBytes());
        out.close();
    }
}

IO流(FileOutputStream写出数据加入异常处理)

A:案例演示:FileOutputStream写出数据加入异常处理
public class MyTest {
    public static void main(String[] args) {
        FileOutputStream out = null;
        try {
            out = new FileOutputStream("c.txt");
            out.write("你好".getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(out!=null){
                    out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

IO流(FileInputStream读取数据一次一个字节)

A:案例演示:	int read():一次读取一个字节
                如果没有数据返回的就是-1
public class MyTest {
    public static void main(String[] args) throws IOException {
        FileInputStream in= new FileInputStream("c.txt");
        int by = in.read();
        System.out.println(by);
        by = in.read();
        System.out.println(by);
        by = in.read();
        System.out.println(by);
        by = in.read();
        System.out.println(by);
        by = in.read();
        System.out.println(by);
        by = in.read();
        System.out.println(by);
        by = in.read();
        System.out.println(by);
        in.close();
    }
}

IO流(字节流复制文本文件)

A:案例演示:	字节流一次读写一个字节复制文本文件
 分析:
- a: 创建字节输入流对象和字节输出流对象
- b: 频繁的读写操作
- c: 释放资源

 public class MyTest {
    public static void main(String[] args) throws IOException {
       
        FileInputStream in = new FileInputStream("MyTest.java"); 
        FileOutputStream out = new    	        FileOutputStream("C:\\Users\\ShenMouMou\\Desktop\\MyTestCopy.java");
        int by=0;
        while ((by=in.read())!=-1){
            out.write(by);
        }
        in.close();
        out.close();
        System.out.println("复制完成");
    }
}

IO流(字节流复制MP3)

A:案例演示:	字节流一次读写一个字节复制MP3
   public class MyTest {
    public static void main(String[] args) throws IOException {
        FileInputStream in = new FileInputStream("C:\Users\HP\Music\You.mp3");
        FileOutputStream out = new FileOutputStream("C:C:\Users\HP\Desktop\You.mp3");
        long start = System.currentTimeMillis();
        int by=0;
        while ((by=in.read())!=-1){
            out.write(by);
            out.flush(); 
        }
        in.close();
        out.close();
        long end = System.currentTimeMillis();
        System.out.println("复制完成耗时"+(end-start)+"毫秒");
    }
}

IO流(FileInputStream读取数据一次一个字节数组)

A:案例演示:	int read(byte[] b):一次读取一个字节数组
		返回的int类型的值表示的意思是读取到的字节的个数,如果没有数据了就返回-1
public class MyTest {
    public static void main(String[] args) throws IOException {
        FileInputStream in = new FileInputStream("C:\Users\HP\Music\You.mp3");
        FileOutputStream out = new FileOutputStream("C:C:\Users\HP\Desktop\You.mp3");
        int len=0;
        byte[] bytes = new byte[1024*8]; 
        long start = System.currentTimeMillis();
        while ((len=in.read(bytes))!=-1){
            out.write(bytes,0,len);
            out.flush();
        }
        in.close();
        out.close();
        long end = System.currentTimeMillis();
        System.out.println("复制完成耗时" + (end - start) + "毫秒");
    }
}

IO流(字节流复制文本文件2)

A:案例演示:	字节流一次读写一个字节数组复制文本文件
public class MyTest2 {
    public static void main(String[] args) throws IOException {
        FileInputStream in = new FileInputStream("D:\\搜狗高速下载\\DREAM.mp4");
        FileOutputStream out = new FileOutputStream("C:\Users\HP\Desktop\\视频.mp4");
        int len=0;
        byte[] bytes = new byte[1024 * 8];
        long start = System.currentTimeMillis();
        while ((len=in.read(bytes))!=-1){
            out.write(bytes,0,len);
            out.flush();
        }
        
        in.close();
        out.close();

        long end = System.currentTimeMillis();
        System.out.println("复制完成耗时" + (end - start) + "毫秒");

    }
}

IO流(BufferedOutputStream写出数据)

A:缓冲思想
	字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,
	这是加入了数组这样的缓冲区效果,java本身在设计的时候,
	也考虑到了这样的设计思想(装饰设计模式后面讲解),所以提供了字节缓冲区流
B:BufferedOutputStream的构造方法
	查看API
	BufferedOutputStream(OutputStream out)

IO流(BufferedInputStream读取数据)

A:BufferedInputStream的构造方法
	查看API
	BufferedInputStream(InputStream in)


IO流(字节流四种方式复制MP3并测试效率)

A:案例演示
	通过以下四个代码测试效率。
	基本字节流一次读写一个字节
	基本字节流一次读写一个字节数组
	高效字节流一次读写一个字节
	高效字节流一次读写一个字节数组

public class MyTest {
    public static void main(String[] args) throws IOException {
       copyFile1();
       copyFile2();
       copyFile3();
       copyFile4();
    }

    private static void copyFile4() throws IOException {
        BufferedInputStream bfr = new BufferedInputStream(new FileInputStream("C:\Users\HP\Music\You.mp3"));
        BufferedOutputStream bfw = new BufferedOutputStream(new FileOutputStream("C:C:\Users\HP\Desktop\You.mp3"));

        int len = 0;
        //加入缓冲区
        byte[] bytes = new byte[1024 * 8];
        long start = System.currentTimeMillis();
        while ((len = bfr.read(bytes)) != -1) {
            bfw.write(bytes,0,len);
        }

        bfr.close();
        bfw.close();
        long end = System.currentTimeMillis();
        System.out.println("复制完成耗时" + (end - start) + "毫秒");
    }

    private static void copyFile3() throws IOException {
        FileInputStream in = new FileInputStream("C:\Users\HP\Music\You.mp3");
        FileOutputStream out = new FileOutputStream("C:C:\Users\HP\Desktop\You.mp3");
        int len = 0;
        //加入缓冲区。
        byte[] bytes = new byte[1024 * 8];

        long start = System.currentTimeMillis();
        while ((len = in.read(bytes)) != -1) {
            out.write(bytes,0,len);
        }
        in.close();
        out.close();
        long end = System.currentTimeMillis();
        System.out.println("复制完成耗时" + (end - start) + "毫秒");
    }

    private static void copyFile2() throws IOException {
        FileInputStream in = new FileInputStream("C:\Users\HP\Music\You.mp3");
        FileOutputStream out = new FileOutputStream("C:C:\Users\HP\Desktop\You.mp3");
        int by = 0;
        long start = System.currentTimeMillis();
        while ((by = in.read())!=-1) {
            out.write(by);
        }

        in.close();
        out.close();
        long end = System.currentTimeMillis();
        System.out.println("复制完成耗时" + (end - start) + "毫秒");

    }

    private static void copyFile1() throws IOException {
        BufferedInputStream bfr = new BufferedInputStream(new FileInputStream("C:\Users\HP\Music\You.mp3"));
       
        BufferedOutputStream bfw = new BufferedOutputStream(new FileOutputStream("C:C:\Users\HP\Desktop\You.mp3"));

        int by=0;
        long start = System.currentTimeMillis();
        while ((by = bfr.read())!=-1){
            bfw.write(by);
        }

        bfr.close();
        bfw.close();
        long end = System.currentTimeMillis();
        System.out.println("复制完成耗时" + (end - start) + "毫秒");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值