IO流笔记

文件操作

1.1 文件操作类:File,以及常用方法

关于创建:

  • public boolean createNewFile() throws IOException:创建新文件
  • public boolean mkdir():创建当前对象所描述的文件夹的最后一级(如果其父级路径不存在,则创建失败)
  • public boolean mkdirs():创建当前File对象所描述的文件夹(其父级路劲不存在,则自动创建),就是创建多级路径

关于删除

  • public boolean delete():删除指定路径的文件或者文件夹;如果删除的是文件夹,则文件夹必须是空的。否则删除失败。

以上的方法都是针对创建对象时指定路径的最后一级操作,例:

File f = new File("D:" + File.separator + "IO流" + File.separator + "a" + File.separator + "b");

此处最后一级是b文件夹,所以只是操作b文件夹

其他方法

  • public String getName()
  • public int length()
  • public File getAbsoluteFile()
  • public String getPath()

2、输入流:InputStream

构造方法

  • FileInputStream(File f):将一个File对象所表示的文件封装到一个字节输入流中,未来都是以字节方式读取文件内容
  • FileInputStream(String path):将一个字符串所表示的文件路径封装到一个字节输入流中,未来从文件中以字节的方式读取文件内容

读取文件的方法

  • int read():从当前的直接输入流中,读取并返回一个字节,返回值结果int,表示读取到的字节对应的整数结构,如果返回-1表示证明文件读取完毕
  • int read(byte[] arr): 读取数组大小个数的字节信息,存储到数组中,返回值结果为int,表示本次读取到的字节的个数,如果读取到-1,证明文件读取完毕
  • void close():关闭该流对象

例:

public class Demo4 {

    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream(new File("D:\\IO流\\1.txt"));  //获取文件流
//        int read = fis.read(); //读取文件单个字节,返回值就为每次读取到的值的ASCII码值
        //循环读取,全部读完返回-1
        int i;
        while ((i = fis.read()) != -1) {
            System.out.print((char) i);
        }
    }
}

将读取结果存放到byte数组:

public class Demo3 {

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

        FileInputStream fis = new FileInputStream(new File("D:\\IO流\\1.txt"));  //获取文件流
        byte[] bytes = new byte[9];

        int read = fis.read(bytes);//读取数组大小个数的字节信息,存储到数组中,返回值结果为int,表示本次读取到的字节的个数
        String str = new String(bytes);//转为字符串

        System.out.println(read);
        System.out.println(str);

        //继续向后读
        read = fis.read(bytes);
        System.out.println(read);
        System.out.println(new String(bytes,0,read));

        fis.close();

    }

}

3、输入、输出流 OutputStream

  • OutputStream
  • InputStream


4、高效字节缓冲流

  • BufferedOutputStream
    ①:write():写出到缓冲区中, 不会直接写到磁盘,除非关闭流对象,或者写够8192
    ②:flush():刷新,将写到缓冲区的写到磁盘。
  • BufferedInputStream

5、字符流

  • Writer
  • Reader

6、字符高效缓冲流

  1. BufferedReaderBufferedWriter,构造方法接收字符流。
  2. 高效的原理:
    (1) 输入流,每次调用read方法,一次从磁盘中读取8192个字符,存储到该类型对象的缓冲数组中,将其中一个返回给调用者,再次调用read方法 时候,就不需要再访问磁盘了,直接从缓冲区中拿出来一个即可
    (2) 输出流:每次调用writer,不会直接将内容刷新到目标文件,会先放入缓冲数组中,等字符数组写满了,才会一次刷新到目标文件中,减少了磁盘交互的次数,提升了效率
  3. 特有方法:
    (1)   BufferedReaderreadLine(); 可以从输入流中一次读取一行数据,返回一个字符串,如果到达文件末尾,则返回null
    (2)  BufferedWriternewLine(); 换行,在不同的操作系统中,换行符各不相同,newLine方法就是根据不同的系统,提供不同的换行符

7、转换流

  • OutputStreamWriter(OutputStream os,String charsetName)
  • InputStreamReader(InputStream is, String charsetName)

8、字节数组流

  • ByteArrayOutputStreamByteArrayInputStream

9、标准输入输出流

  1. System.in:标准的输入流,返回值类型InputStream(字节流)
    (1) 分类:字节输入流
    (2) 设备:默认关联至键盘
    (3) 对标准输入流关联的路径进行修改:setIn(InputStream is),来自于System类中,可以改变标准输入流对象的数据来源
    (4) 该对象不需要关闭

  2. System.out:标准的输出流,返回值类型PrintStream(打印流)
    (1) 分类:打印字节流
    (2) 设备:默认关联至控制台
    (3) 对标准的输出流关联的路径进行修改:setOut(PrintStream ps)

  3. 注意:System.in主要使用在默认到键盘的录入场景上,System.out是默认关联到控制台进行输出,主要关注的就是PrintStreamprintprintln系列方法功能,将任意的数据转换成字符串进行输出,默认在控制台

10、对象输入输出流

  1. ObjectOutputStream:对象输出流,是ObjectStream的子类
    (1) ObjectOutputStream(OutputStrean o):需要绑定一个写出的地方,比如:向文件中写入对象
  2. ObjectInputStream:对象输入流,将用对象输出流输出的对象读取到内存中。

11、properties配置文件的读写

  1. load(InputStream in): 通过load方法,将InputStream字节流读取到的配置文件信息放置到Properties的键值对集合中
  2. load(Reader read):通过load方法,将字符流读取到的配置文件信息,放入到集合中。
  3. store(OutputStream out,String comments):使用字节输出流,修改配置文件中的内容,comments是对于本次修改的描述
  4. sotre(Writer w,String comments):使用字符的输入流,修改配置文件中的内容,comments就是修改的描述
  5. list(PrintStream out):将文件内容全部输出到制定打印流,可以打印到控制台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值