Java面向对象—IO流

I/O流

一、什么是I/O流

I :Input

O:Output

通过I/O可以完成硬盘文件的读和写

二、I/O流的分类

1、按照流的方向进行分类:

以内存作为参照物: 。往内存中去: 叫做输入(lnput)。或者叫做读(Read)。 。从内存中出来: 叫做输出(Output)。或者叫做写(Write)。

2、按照 读取数据方式 不同进行分类: (1)按照 字节 的方式读取数据,一次读取1个字节byte,等同于一次读取8个二进制位,文本文件,图片,声音文件,视频文件 等... 这种流是万能的,什么类型的文件都可以读取。包括:文本文件,图片,声音文件,视频文件 等...

例如: 假设文件file1.txt,采用字节流的话是这样读的! a中国bc张fe 第一次读: 一个字节,正好读到'a' 第二次读:一个字节,正好读到中”字符的一半。 第三次读:一个字节,正好读到中”字符的另外一半

(2)按照 字符 的方式读取数据的,一次读取一个字符 这种流是为了方便读取 普通文本文件 而存在的,这种流不能读取: 图片、声音、视频等文件。只能读取 纯文本文件,连word文件都无法读取。 注意: 纯文本文件,不单单是txt文件,还包括 .java、.ini、.py 。总之只要 能用记事本打开 的文件都是普通文本文件。

例如: 假设文件file1.txt,采用字符流的话是这样读的: a中国bc张=fe 第一次读:a字符 (a字符在windows系统中占用1个字节。) 第二次读:中字符(中字符在windows系统中占用2个字节。)

3、按照流的处理方式分类:

(1)直接处理流:

(2)间接处理流:

综上所述:流的分类:

输入流、输出流

字节流、字符流

直接处理流、间接处理流

三、File类的常用方法:

  • boolean exists() 判断文件或目录是否存在

  • boolean isFile() 判断是否是文件

  • boolean isDirectory() 判断是否是目录

  • String getPath() 返回此对象表示的文件的相对路径名

  • String getAbsolutePath() 返回此对象表示的文件的绝对路径名

  • String getName() 返回此对象表示的文件或目录的名称

  • boolean delete() 删除此对象指定的文件或目录

  • boolean createNewFile() 创建名称的空文件,不创建文件夹

  • long length() 返回文件的长度,单位为字节,如果文件不存在,则返回0

public class FileTest01 {
    public static void main(String[] args) {
        File f=new File("D:/123.txt");
        System.out.println("文件绝对路径"+f.getAbsolutePath());//D:\123.txt
        System.out.println("文件是否存在"+f.exists());//true
        System.out.println("是否是文件"+f.isFile());//true
        System.out.println("是否是目录"+f.isDirectory());//false
        System.out.println("文件相对路径"+f.getPath());//D:\123.txt
        System.out.println("文件名"+f.getName());//123.txt
        try {
            if (f.createNewFile()){
                System.out.println("创建成功");
            }else{
                System.out.println("文件已存在");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("文件长度"+f.length());//45
    }
}

文件输出流

/**输出流,字节流,直接处理流
 * @author Lx 写出
 * @create 2024-03-05 21:19
 */
public class FileOutputTest02 {
    public static void main(String[] args) throws IOException {
        File f=new File("D:/456.txt");
        //输出流,true表示在f的基础上追加内容
        OutputStream os=new FileOutputStream(f,true);
        //也可以写成以下形式,效果一样
        //OutputStream os=new FileOutputStream("D:/456.txt",true);//直接对文件处理
        for (int i = 1; i < 1000; i++) {
            //在文件中写入
            os.write(i);
        }
        os.flush();//强制把半路的数据压入文件
        os.close();//关闭流
    }
}

文件输入流

/**输入流,字节流,直接处理流
 * @author Lx
 * @create 2024-03-06 14:53
 */
public class FileInputTest03 {
    public static void main(String[] args) throws IOException {
        File f=new File("D:/456.txt");
        //定义一个输入流接到文件中
        InputStream is=new FileInputStream(f);
        //定义一个小桶用来装数据
        byte [] b=new byte[1024];
        //用read()方法把数据装入到小桶中,并计算出一桶里装多少个数据
        int length=0;
        //System.out.println(length);
        //大于0则表示有数据
        while((length=is.read(b))>0){
            //把一桶数据存到str中
            String str=new String(b,0,length);
            System.out.println(str);
            //再读下一桶数据
            //length=is.read(b);
            System.out.println(length);
        }
        is.close();
    }
}

写出

/**输出流,字符流,直接处理流
 * @author Lx
 * @create 2024-03-06 15:43
 */
public class FileWriterTest0401 {
    public static void main(String[] args) throws IOException {
        Writer w = new FileWriter("D:/456.txt",true);
        /*for (int i = 1; i < 1000; i++) {
            w.write(i);
        }*/
        char [] c="把这一段字符串放在数组中".toCharArray();
        for (int i = 0; i < c.length; i++) {
            w.write(c[i]);
        }
        w.flush();
        w.close();
    }
}

读入

/**输入流,字节流,直接处理流
 * @author Lx
 * @create 2024-03-06 20:33
 */
public class FileReaderTest05 {
    public static void main(String[] args) throws IOException {
        //定义一个输入流
        Reader r=new FileReader("D:/456.txt");
        //定义一只小桶
        char[] c=new char[1024];
        int length=r.read(c);
        while(length>0){
            String str=new String(c,0,length);
            System.out.println(str);
            length=r.read(c);
        }
        r.close();
    }
}
  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值