JavaDay12-初识IO流、FileOutputStream、FileInputStream

一、基本概念

IO流--存储和读取数据的解决方案

IO流的作用:

1、input:将文件中的内容加载到程序中
2、output:将程序中的结果、输出保存在文件中

IO流的分类

1、输入流 输出流
2、字节流(可以操作图片、文本、视频、音频) 字符流(只能操作纯文本 .txt .md .xml .lrc)

字节流

1、InPutStream

  • FileInPutStream

2、OutPutStream

  • FileOutPutStream

字符流

1、Reader
2、Writer

二、FileOutPutStream-向文本文档中写入数据

步骤

1、创建FileOutputStream对象

  • 细节:文件存在(是否清空)、文件不存在(上级目录必须存在)、是否续写(true)

2、调用write()方法

  • 细节:写入整数、字节数组、换行
    3、关闭资源
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
//FileOutputStream
public class ByteStreamDemo01{
    //IOException是FileNotFoundException上级,只抛出一个即可
    public static void main(String[] args) throws IOException {
        FileOutputStream fs = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\Java_learningCode\\fileStreamLearn.txt");
        //写入的是ASCII值表示的字符,即:{
        fs.write(123);
        //写入数组(会先清空)
        byte[] a={10,20,30,40,50};//数组中的是所要存入字符的ASCII码值
        fs.write(a);
        fs.write(a,2,3);
        fs.close();//释放资源
    }
}

写入内容的不同情况

1、写入一个字符
write(int)
2、通过数组写入字符串
①先用数组接收需要写入的字符串;
②调用write(byte[])方法

注意点:

1、如果文件不存在则会创建一个新的文件,前提是父级路径是存在的
2、如果文件中有内容,那么每次写入都会清空文件

FileOutputStream-换行、续写

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
//FileOutputStream-换行、续写
public class ByteStreamDemo02 {
    public static void main(String[] args) throws IOException {
        FileOutputStream fs = new FileOutputStream("E:\\ideaCode\\JavaIOStream_HeiMa\\src\\ioStream\\ioStreamPractise.txt");

        //写入一串字符串:I love you.
        String str1="I love you";//创建字符串
        byte[] bytes1 = str1.getBytes();//转成ASCII码值并存入数组
        //System.out.println(Arrays.toString(bytes));//测试是否转成了ASCII值
        fs.write(bytes1);//调用write()方法写入文档中

        //换行
        String str2="\r\n";
        byte[] bytes2 = str2.getBytes();
        fs.write(bytes2);

        //写入第二行字符
        String str3="William";
        byte[] bytes3 = str3.getBytes();
        fs.write(bytes3);

        fs.close();
    }
}

三、FileInputStream-读取文本文档中的数据

步骤

1、创建对象
2、调用read()方法
3、释放资源

细节:

1、读到的字符是ASCII值,要读取字符的话需要强转成char类型
2、读到末尾后,read()会返回-1
3、如果多次调用read(),那么后面读取数据是从上一次读完的位置继续读的
4、关闭资源、先打开的后关闭

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

//FileInputStream
public class ByteStreamDemo03 {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("E:\\ideaCode\\JavaIOStream_HeiMa\\src\\ioStream\\ioStreamPractise.txt");
          int read = fis.read();//第一次调用read()
          System.out.println(read);//读取一个字符的ASCII值
          System.out.println((char)read);//读取一个字符
  
          //循环读取数据
          int b;
          while ((b=fis.read())!=-1){//第2次调用read(),从第二个字符开始读,直到末尾
              System.out.print((char)b);
          }
  
          //拷贝--将一个文件复制到另一个文件中:边读边写
          FileOutputStream fos = new FileOutputStream("E:\\ideaCode\\JavaIOStream_HeiMa\\src\\ioStream\\ioStreamPractise1.txt");
          int bb = 0;
          while ((bb=fis.read())!=-1){//第三次调用read(),由于上次已经读完了,所以什么也读不到
              System.out.print((char)bb);
              fos.write(bb);
          }

        //一次读取多个字节的数据
        byte[] bytes = new byte[8];//创建一个字节数组,一次性读取8个字符
        int len=fis.read(bytes);//返回本次读取到的字节数 8
        String str = new String(bytes,0,len);//把字节数组的一部分变成字符串
        System.out.println(str);

        fos.close();//先打开的后关闭
        fis.close();//千万不要忘记释放资源
    }
}
posted @ 2023-04-10 15:48  小园初来乍到  阅读(58)  评论(0)    收藏  举报