Java IO流

File

file是java.io.包下类文件.File类的文件,用于代表当前操作系统的文件(文件或文件夹)

file只能对文件本身进行操作,并不能操作文件数据,使用io流读写文件数据或者其他数据。

// 1.创建一个file对象,指代某个具体的文件
// File f1 = new File("F:/shuangti/io.txt");写法1
File f1 = new File("F:\\shuangti\\io.txt");
//File f1 = new File("F:"+File.separator+ "shuangti"+File.separator+"io.txt");
// 2.获得文件大小
System.out.println(f1.length());
//3.指向一个文件夹
File  f2 =  new File("F:\\shuangti");
System.out.println(f2.length());
//4.指定一个不存在的文件
File  f3 =  new File("F:\\shuangti\\aaa.txt");
System.out.println(f3.length());
//文件不存在显示flase
System.out.println(f3.exists());
//显示绝对路径:带盘符
//File f4 = new File("H:\\java\\IDE\\javastudy\\date_4.7file_IO\\src\\liuboss");
//相对路径(重点):不带盘符,默认是直接去工程下寻找
File f4 = new File("date_4.7file_IO\\src\\liuboss");
System.out.println(f4.length());
System.out.println(f4.exists());
File f1 = new File(F://shaungti//io.txt);
System.out.println(f1.length());
//判断当前文件对象指代的是否是文件
System.out.println(f1.isFile());
//判断当前文件对象是否是文件夹
System.out.println(f1.isDirectory());
//获取当前文件名称
System.out.println(f1.getName());
//获取文件字节数
System.out.println(f1.length());
//获取创建时使用的路径
System.out.println(f1.getPath());
//获取绝对路径
System.out.println(f1.getAbsolutePath());
//获取文件最后修改时间
long time = f1.lastModified();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(time));
public static void main(String[] args) throws IOException {
    File f1 =new File("F:\\shuangti\\liuboss.txt");
    // 1.创建文件
    System.out.println(f1.createNewFile());
    // 2.创建文件夹
    File f2 = new File("F:\\shuangti\\aaa");
    // 3.创建一级文件夹 mkdirs创建多级文件夹
    System.out.println(f2.mkdir());
    //删除文件,空文件夹,不能删除非空文件夹
    System.out.println(f1.delete());
    System.out.println(f2.delete());
}

IO概述

IO流本质就是读写数据,IO流(将数据从磁盘输入到内存,或者将内存数据输出到磁盘中)

1.按流的方向分为

1.I代表INput输入流

2.O代表OUTput输出流

2.按流的最小存储单位

1.字节流

2.字符流

3.学习IO流目标

1.先搞清楚IO流的分类和体系

2.再学每个IO流的用法

一、字节流

FileInPutStream

作用:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中

public static void main(String[] args) throws Exception {
    //1.创建一个文件字节输入流管道,与源文件接通
    InputStream p1 = new FileInputStream(("data_4.9IO\\pp.txt"));
    //2.开始读取源文件的字节数据
    //3.读取第一个字符
    /*  int b1 = p1.read();
    System.out.println(b1);
    //4.读取第二个字符
    int b2 = p1.read();
    System.out.println(b2);
    int b3 = p1.read();
    System.out.println((char)b3);
    //5.不存在的字符默认为-1
    int b5 = p1.read();
    System.out.println(b5);*/
    //使用循环改造代码
    int b;
    while ((b= p1.read()) != -1){
        System.out.print((char) b);
        //读取数据很差,平凡调用系统资源
        //流使用完毕,必须关闭释放系统资源
    }
    p1.close();
}
public static void main(String[] args) throws Exception {
    // 目标每次读取多个字节
    InputStream p1 = new FileInputStream(("data_4.9IO\\pp.txt"));
    // 1.每次读取多个字节
    /* byte[] buffer = new byte[4];
     // 2.获取输出数量
     int len = p1.read(buffer);
     // 3.按数量限制解码
     String rs = new String(buffer);
     System.out.println(rs);
     System.out.println("读取字节数量"+len);

    int len2 = p1.read(buffer);
    // 4.读多少倒多少
    String rs2 = new String(buffer,0,len2);
    System.out.println(rs2);
    System.out.println("读取字节数量"+len2);*/

    byte[] buffer = new byte[4];
    int len;//记住读取了多少个字节
    while ((len = p1.read(buffer)) != -1 )
    {
        String  rs = new String(buffer,0,len);
        System.out.println(rs);
    }
    p1.close();
}

FileOutPutStream

以内存为基准,把内存中的数据以字节形式写出到文件中

public static void main(String[] args) throws Exception {
    //1.创建一个字节输出流管道与目标文件接通。
    OutputStream os = new FileOutputStream("data_4.9IO\\os.txt");
    os.write(97); //97就是一个字节
    os.write('b'); //’b‘是一个字符
    os.write('刘');
    byte[] bytes ="我爱你中国".getBytes();
    os.write(bytes);
    os.write(bytes,0,15);
    System.out.println(bytes);
    os.close();
}

COPY

public static void main(String[] args) throws Exception {
    //1.创建一个输入流管道用于复制文件
    InputStream in = new FileInputStream("date_4.7file_IO\\src\\liuboss");
    //2.创建一个输出流管道用于粘贴文件到位置
    OutputStream os = new FileOutputStream("data_4.9IO\\src\\liuboss");
    //3.创造一个数组接复制内容
    byte[] buffer  = new byte[1024];
    //4.记住每次读取了多少字符
    int len;
    while ((len = in.read(buffer)) != -1){
        os.write(buffer,0,len);
    }
    os.close();
    in.close();
    System.out.println("复制完成");
}

释放资源

public static void main(String[] args)  {
    InputStream in = null;
    OutputStream os =null;
    //1.创建一个输入流管道用于复制文件
    try {
        in = new FileInputStream("date_4.7file_IO\\src\\liuboss");
        //2.创建一个输出流管道用于粘贴文件到位置
        os = new FileOutputStream("data_4.9IO\\src\\liuboss");
        //3.创造一个数组接复制内容
        byte[] buffer  = new byte[1024];
        //4.记住每次读取了多少字符
        int len;
        while ((len = in.read(buffer)) != -1){
            os.write(buffer,0,len);
        }

        System.out.println("复制完成");
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        try {
            if(os != null) os.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            if(in != null) in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

try (
    InputStream in = new FileInputStream("date_4.7file_IO\\src\\liuboss");
    OutputStream os = new FileOutputStream("data_4.9IO\\src\\liuboss");
    //只能放置资源对象
){
    //3.创造一个数组接复制内容
    byte[] buffer  = new byte[1024];
    //4.记住每次读取了多少字符
    int len;
    while ((len = in.read(buffer)) != -1){
        os.write(buffer,0,len);
    }

    System.out.println("复制完成");
} catch (IOException e) {
    throw new RuntimeException(e);
}

二、字符流

适合读写文本文件内容

FileReader

文件字符输入流

public static void main(String[] args) {
    try (//1.创建一个文件字符输入管道
        Reader rs = new java.io.FileReader("data_4.9IO\\pp.txt");
    ){
        int c;
        while ((c = rs.read()) != -1){
            System.out.print((char) c);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

flush刷新流

BufferedReader缓存流

InPutStreamReader字符输入转换流

解决不同编码时,字符流读取文本内容乱码的问题

原理:先获取文件的原始字节流,再将齐按真实的字符集编码转成字符输入流,这样字符输入流中的字符就不乱码

PrintSteam

PrintWrite

DataOutPutStream(数据输出流)

允许把数据和其类型一并写出去

三、序列化流

对象序列化,就是把java对象写入到文件中去

ObjectOutputStream(对象字节输出流)

可以把java对象进行序列化:把java对象存入到文件中去。

对象需要序列化需要一个序列化接口 implements Serializable

反序列化

ObjectinputSteam

可以把java对象进行反序列化:把存储在文件中的java对象读入到内存中,被transient修饰将不会被序列化

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值