Java学习day35-io和io流体系,文件字节流

一、Java IO原理

1.IO流用来处理设备之间的数据传输。

2.Java程序中,对于数据的输入/输出操作以"流(stream)"的方式进行。

3.java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。

4.Java IO原理:(不论输入还是输出,都是指计算机)

  ①输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。

  ②输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中。

5.流的分类:

  ①按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)

  ②按数据流的流向不同分为:输入流,输出流

  ③按流的角色的不同分为:节点流,处理流

 

二、文件字节流

 文件字节流非常通用,可以用来操作字符的文档,还可以操作任何的其他类型文件(图片、压缩包等),因为引用字节流直接使用的是二进制。

package day17;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class Test1 {
    public static void main(String[] args){
//        Test1.testFileInputStream();
//        Test1.testFileOutputStream();
        Test1.copyFile("D:/Test/tt1.txt","D:/Test/a/tt1.txt");
    }
    
    /**
     * 文件字节输入流FileInputStream
     * */
    public static void testFileInputStream(){
        try {
            FileInputStream in = new FileInputStream("D:/Test/tt1.txt");
            
            byte[] b = new byte[20];//设置一个byte数组接收读取文件的内容
            
            int len = 0;//设置一个读取数据的长度
            
//            in.read(b);
            //in.read方法有一个返回值,返回值是读取的数据的长度,如果读取到最后一个数据,还会向后读一个,这个时候返回值就是-1
            //也就意味着当in.read的返回值是-1时,整个文件就读取完毕
            
            while((len = in.read(b)) != -1){
                System.out.println(new String(b,0,len));
                //new String(b,0,len),参数1是缓冲数据的数组,参数2是从数组哪个位置开始转化字符串,参数3是总共转化几个字节
            }
            
            in.close();//注意!流在使用完毕后一定要关闭
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
    }
    
    /**
     * 文件字节输出流FileOutputStream
     * */
    public static void testFileOutputStream(){
        try {
            FileOutputStream out = new FileOutputStream("D:/Test/tt4.txt");//指定向tt4输出数据
            String str = "asdfghjkl";
            out.write(str.getBytes());//把数据写到内存中
            out.flush();//把内存中数据刷写到硬盘
            out.close();//关闭流
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    
    /**
     * 复制文件到指定位置
     * @param inPath 源文件的路径
     * @param outPath 复制到的文件夹位置
     * */
    public static void copyFile(String inPath, String outPath){
        try {
            FileInputStream in = new FileInputStream(inPath);//读取的源文件
            FileOutputStream out = new FileOutputStream(outPath);//复制到的目标文件
            
            byte[] b = new byte[100];
            
            int len = 0;
            
            while((len = in.read(b)) != -1){
                out.write(b, 0, len);//参数1是写的缓冲数组,参数2是从数组的哪个位置开始,参数3是获取的数组的总长
            }
            
            out.flush();//把写到内存的数据刷到硬盘
            out.close();
            in.close();
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

 

posted @ 2020-03-29 15:45  苏胖胖  阅读(143)  评论(0)    收藏  举报