java的IO

文章详细介绍了Java中的IO流概念,包括字节流和字符流的区别,以及FileInputStream和FileOutputStream的使用方法。FileOutputStream用于写入文件,包括基本操作步骤、写数据的不同方式和换行写。FileInputStream用于读取文件,涉及基本操作、循环读取和文件拷贝。文章还提到了流的关闭和资源释放的重要性。
摘要由CSDN通过智能技术生成

IO流是存储到盘符和从盘符读取数据的解决方案。File类只能对文件本身进行操作,不能读写文件里面存储的数据。IO流用于读写文件中的数据。
IO流操作文件类型包括字节流和字符流。字节流可以操作所有类型的文件,字符流只能操作纯文本文件。
纯文本文件是能用windows记事本打开且能读懂的文件(例如.txt文件,.md文件)。
在这里插入图片描述
抽象类InputStream、OutputStream、Reader和Writer有不同的实现类。
InputStream的实现类:
FileInputStream:操作本地文件的字节输入流。
BufferedInputStream:带有缓冲区的字节输入流。
OutputStream的实现类:
FileOutputStream:操作本地文件的字节输入流。
BufferedOutputStream:带有缓冲区的字节输入流。
一、FileOutputStream
操作本地文件的字节输出流,可以把程序中的数据写到本地文件中。
(一)书写步骤
书写步骤如下
(1)创建字节输出流对象;
(2)写数据;
(3)释放资源。
例如:

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

        FileOutputStream fos = new FileOutputStream("javase-learning\\src\\example\\org\\domain\\a.txt");
        fos.write(97);
        fos.close();
    }
}

运行结果是往a.txt文件中写入了字符"a":
在这里插入图片描述
FileOutputStream字符输出流的细节:
1.创建字节输出流对象
(1)构造方法是字符串表示的路径或者是File对象都是可以的;
(2)如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的。
(3)如果文件已经存在,则会清空文件。
2.写出数据
(1)write()方法的参数是整数,但是实际上写到本地文件中的是整数在ASCII上对应的字符。
例如:写一个数字97,分两次写,‘9’和’7’
在这里插入图片描述
在这里插入图片描述
3.释放资源
释放资源的意思是解除了对文件资源的占用。
(二)FileOutputStream写数据的3种方式
在这里插入图片描述
例如,一次写入多个数据:

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

        FileOutputStream fos = new FileOutputStream("javase-learning\\src\\example\\org\\domain\\a.txt");
        byte[] bytes = {97,98,99,100,101};
        fos.write(bytes);
        fos.close();
    }
}

在这里插入图片描述
技巧:
也可以定义一个字符串对象,再用getBytes()方法获取字节数组。
在这里插入图片描述
在这里插入图片描述

(三)FileOutputSream的换行写和续写
1.换行写
windows的换行为\r\n(先回车再换行)。linux的换行为\n。mac的换行为\r。
java在windows中写\r,\n或\r\n都行,最后都会自动补全即为\r\n。

public class MyApp {
    public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("javase-learning\\src\\example\\org\\domain\\a.txt");
        String a= "apple\r\nbanana";
        byte[] bytes = a.getBytes();
        fos.write(bytes);
        fos.close();
    }
}

在这里插入图片描述
2.续写
在new FileOutputStream对象时设置第二个参数为true。
在这里插入图片描述
在这里插入图片描述
二、FileInputStream
操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中来。
(一)基本操作步骤
操作步骤:
(1)创建字节输入流对象;
(2)读入数据;
(3)释放资源。
例如,读取a.txt文件的一个数据:
在这里插入图片描述

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

        FileInputStream fos = new FileInputStream("javase-learning\\src\\example\\org\\domain\\a.txt");

        int b = fos.read();
        System.out.println(b);
        fos.close();
    }
}

也可以通过强转打印字符:
在这里插入图片描述
FileInputStream的实现细节:
1.创建字节输入流对象
(1)如果文件不存在,就直接报错;
2.读取数据
(1)一次读一个字节,读出来的是数据在ASCII上对应的数字;
(2)读到文件末尾了,read()方法返回-1;
(3)释放资源。
(二)FileInputStream的循环读取
在这里插入图片描述

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

        FileInputStream fis = new FileInputStream("javase-learning\\src\\example\\org\\domain\\a.txt");

        int b ;int count=0;
        while((b =fis.read() )!= -1)
        {
            count++;
            System.out.println(count+"====="+b+"====="+(char)b);
        }
        fis.close();
    }
}

在这里插入图片描述
(三)文件拷贝(使用一次读取多个字节的方式)
一次读取一个字节的方式进行文件拷贝:

public class MyApp {
    public static void main(String[] args) throws IOException {
         //1.创建对象
        FileInputStream fis = new FileInputStream("javase-learning\\src\\example\\org\\domain\\a.txt");
       FileOutputStream fos = new FileOutputStream("javase-learning\\src\\example\\org\\domain\\b.txt");
          //2.拷贝
        int b;
        while((b=fis.read()) != -1)
        {
         fos.write(b);
        }
        //释放资源,规则,先开的流后释放
        fos.close();
        fis.close();
    }
}

FileInputStream一次读取多个字节:
在这里插入图片描述
例如:
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值