Java输入流与输出流

一、IO体系架构

在这里插入图片描述

二、File类

我们要操作文件,试问,我们是不是先把这个文件进行封装成一个对象,因为Java是面向对象的一门语言,只有把文件封装成对象,我们才能对文件有进一步的操作。那么这个File对象有哪些行为(操作)呢?

  1. public boolean exists( ) 判断文件或目录是否存在
  2. public String getName( ) 返回文件名或目录名
  3. public String getPath( ) 返回文件或目录的路径
  4. public void delete( ); 删除文件
  5. public boolean mkdir( ); 创建目录

注意,这只是对文件做一步处理,封装成对象,程序才能操作!

三、字节流

OutputStream与InputStream 类是抽象类,因此并不能实例化,是以字节为单位进行数据传输,因此,OutputStream与inputStream能操作很多类型的文件,比如:视频、音频、文件等。其实,OutputStream与InputStream 就是讲内存与硬盘之间打开一个管道,数据通过这个管道进行传输,进行读写数据。
在这里插入图片描述

1、InputStream

是将数据从硬盘读入程序(内存)。其子类为FileInputStream,通过这个子类进行读取数据。
道理就像从井里抽水的过程,其中水池相当于内存,InputStream有个行为是read()方法,当启动这个方法时,就像启动了发动机,进行抽水,而FilePutStream就像管道,将井与水池建立连接,建立连接时,是不是要明确从哪里抽水,故new FilePutStream(“路径”)。

2、OutputStream

是将程序(内存)中的数据写入硬盘。其子类为FileOutputStream,通过这个子类进行写取数据。
同上道理,只不过,这次水井相当于内存。OutputStream有个行为是Writer()方法,当启动这个方法时,就像启动了发动机,进行抽水,而FileOutputStream就像管道,将井与水池建立连接,建立连接时,是不是要明确将水抽到哪里去,故new FileOutputStream(“路径\文件”)。如果有同名文件,自动覆盖。不存在时自动建立。
抽水完毕后,水管里面是不是还存留的有水,这时我们可以启动OutputStream的另外一个行为flush()方法,进行冲水,把剩余的管子里面的水冲净。

三、字节流示例

public static void main(String[] args) {
        try {
            File file = new File("C:\\Users\\HP\\Desktop\\helloWord.txt");
            if (file.exists()){
                InputStream in = new FileInputStream(file);
                OutputStream out = new FileOutputStream("C:\\Users\\HP\\Desktop\\helloWord111.txt");
                byte[] buffer = new byte[1024]; //建立一个缓冲区
                int len = 0;
                while ((len=in.read(buffer))>0){
                    out.write(buffer,0,len);
                }
                out.flush();
                out.close();
                in.close();
            }
        }catch (Exception e) {
            e.printStackTrace();
        }

    }

四、字符流

字符流以字符为单位传送数据,只能传送文本类型的数据。

1、FileReader

读取指定磁盘文件内容的实例

FileReader fr = new FileReader(“文件路径”);
char[] data = new char[23];         //定义char数组
int length = 0;
while((length = fr.read(data))>0){          //循环读取文件中的数据
    String str = new String(data,0,length);         //根据读取文件的内容创建String 对象
    System.out.println(str);                //输出读取内容
}
fr.close();                  

2、FileWriter

文件字符输出流继承了Writer类,提供了向文件输出的各种方法,数据通过文件字符输出流以字符为单位输出并保存到文件中。

public static void main(String[] args) {
        File file = new File("D://word2.txt");      //创建指定文件
        try {
        if(! file.exists()){
                file.createNewFile();               //如果指定文件不存在,新建文件
        }
        FileReader fr = new FileReader("D://word.txt");
        FileWriter fw = new FileWriter(file);               //创建FileWriter对象
        char[] data = new char[23];
        int length = 0;
        while((length = fr.read(data)) != -1){          //如果没有读到文件末尾
            fw.write(data );           //向文件写入数据
        }
        fr.close();                         //关闭流
        fw.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值