Java中的字符集和IO流

File类

概述:在包java.io.File下、代表操作系统的文件对象(文件、文件夹);

File类创建对象常用方法

方法名说明
public File(String pathname)根据文件路径创建文件对象
public File(String parent, String child)根据父路径名字符串和子路径名字符串创建文件对象
public File(File parent, String child)根据父路径对应文件对象和子路径名字符串创建文件对象
package cn.edu.njust.file;

import java.io.File;

public class Demo01 {
    public static void main(String[] args) {
        // 1.创建File对象 -- 绝对路径访问
        File file = new File("C:\\Users\\NJUST'er'wang's\\Pictures\\MyWallPaper\\02_WallPaper.jpg");
        // 获取文件的字节大小
        long size = file.length();
        System.out.println(size);

        // file对象支持绝对路径,也支持相对路径
        // 相对工程 从工程名开始
        File file1 = new File("day01/src/data.txt");
        long size1 = file1.length();
        System.out.println(size1);

    }
}

常用API

方法名说明
public boolean isDirectory()判断此路径名表示的File是否为文件夹
public boolean isFile()判断此路径名表示的File是否为文件
public boolean exists()判断此路径名表示的File是否存在
public long length()返回文件的大小(字节数量)
public String getAbsolutePath()返回文件的绝对路径
public String getPath()返回定义文件时使用的路径
public String getName()返回文件的名称,带后缀
public long lastModified()返回文件的最后修改时间(时间毫秒值)

File类创建和删除文件

方法名称说明
public boolean createNewFile()创建一个新的空的文件
public boolean mkdir()只能创建一级文件夹
public boolean mkdirs()可以创建多级文件夹
public boolean delete()删除由此抽象路径名表示的文件或空文件夹
  • 注意:delete方法删除的文件不会进入回收站;

遍历文件夹

遍历功能

方法名称说明
public String[] list()获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。
public File[] listFiles()(常用)获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)

注意事项

  • 文件不存在时或者代表文件时,返回null;
  • 当文件对象代表一个空文件夹时,返回一个长度为0的数组;
  • 当文件对象是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回;
  • 当文件对象是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件;
  • 当没有权限访问该文件夹时,返回null;

方法递归–文件搜索

package cn.edu.njust.file;

import java.io.File;

public class Demo03 {
    public static void main(String[] args) {
        // 递归找文件
        searchFile(new File("D:/"),"Season.java");

    }

    /**
     *
     * @param dir 被搜索源目录
     * @param fileName 被搜索文件名
     */
    public static void searchFile(File dir,String fileName){
        // 判断是否是文件夹
        if (dir != null) {
            // 提取当前文件下的一级文件对象
            File[] files = dir.listFiles();
            // 判断是否存在一级文件
            if (files != null && files.length>0) {
                for (File file: files) {
                    // 判断一级文件类型
                    if (file.isFile()) {
                        // 判断是否是所需要的文件名
                        if (file.getName().equals(fileName)) {
                            System.out.println("文件已找到");
                            System.out.println("路径为:" + file.getAbsolutePath());
                            return;
                        }
                    }else {
                        // 是文件夹时
                        searchFile(file,fileName);
                    }
                }
            }
        } else {
            System.out.println("该文件为空");
        }

    }
}

字符集

简介

字符集基本知识

  • 计算机底层不可以直接存储字符。计算机中底层智能存储二进制(0,1);
  • 二进制是可以转换成十进制的;
  • 计算机底层可以表示十进制编号。计算机可以给人类字符进行编号存储,这套编号规则称为字符集;

分类

  • ASCII字符集
  • GBK字符集
  • Unicode(UTF-8)字符集等。

字符集的解码、解码操作

String编码

方法名称说明
byte[] getBytes() 使用平台的默认字符集将该 String编码为一系列字节,将结果存储到新的字节数组中
byte[] getBytes(String charsetName) 使用指定的字符集将该 String编码为一系列字节,将结果存储到新的字节数组中

String解码

构造器说明
String(byte[] bytes) 通过使用平台的默认字符集解码指定的字节数组来构造新的 String
String(byte[] bytes, String charsetName) 通过指定的字符集解码指定的字节数组来构造新的 String

IO控制

简介:IO流也称为输入、输出流,就是用来读写数据的;

  • I表示intput,把硬盘文件中的数据读入到内存的过程,称之输入,负责读。
  • O表示output,把内存中的数据写出到硬盘文件的过程,称之输出,负责写。

IO流的分类

  • 按流的方向分:输入流、输出流
  • 按流中的数据最小单位分为:字节流、字符流

总结流的四大类

  • 字节输入流:以内存为基准,来自磁盘文件/网络中的数据以字节的形式读入到内存中去的流称为字节输入流。
  • 字节输出流:以内存为基准,把内存中的数据以字节写出到磁盘文件或者网络中去的流称为字节输出流。
  • 字符输入流:以内存为基准,来自磁盘文件/网络中的数据以字符的形式读入到内存中去的流称为字符输入流。
  • 字符输出流:以内存为基准,把内存中的数据以字符写出到磁盘文件或者网络介质中去的流称为字符输出流。

字节流

分为InputStreamOutputStream

读取字节流

每次读一个字节

文件字节输入流:FileInputStream
作用:以内存为基准,把磁盘文件中的数据以字节的形式读取到内存中去。

构造器说明
public FileInputStream(File file)创建字节输入流管道与源文件对象接通
public FileInputStream(String pathname)创建字节输入流管道与源文件路径接通
方法名称说明
public int read()每次读取一个字节返回,如果字节已经没有可读的返回-1
public int read(byte[] buffer)每次读取一个字节数组返回,如果字节已经没有可读的返回-1
每次读一个字节数组

文件字节输入流:FileInputStream
作用:以内存为基准,把磁盘文件中的数据以字节的形式读取到内存中去。

方法名称说明
public int read()每次读取一个字节返回,如果字节已经没有可读的返回-1
public int read(byte[] buffer)每次使用字节数组来读取数据,返回读取的字节个数,如果没有可读返回-1
读取全部字节
方法名称说明
public int read(byte[] buffer)每次读取一个字节数组返回,如果字节已经没有可读的返回-1
public byte[] readAllBytes() throws IOException直接将当前字节输入流对应的文件对象的字节数据装到一个字节数组返回

输出字节流

文件字节输出流:FileOutputStream
作用:以内存为基准,把内存中的数据以字节的形式写出到磁盘文件中去的流。

构造器说明
public FileOutputStream(File file)创建字节输出流管道与源文件对象接通
public FileOutputStream(File file,boolean append)创建字节输出流管道与源文件对象接通,可追加数据
public FileOutputStream(String filepath)创建字节输出流管道与源文件路径接通
public FileOutputStream(String filepath,boolean append)创建字节输出流管道与源文件路径接通,可追加数据

文件字节输出流(FileOutputStream)写数据出去的API

方法名称说明
public void write(int a)写一个字节出去
public void write(byte[] buffer)写一个字节数组出去
public void write(byte[] buffer , int pos , int len)写一个字节数组的一部分出去。

流的关闭与刷新

方法说明
flush()刷新流,还可以继续写数据
close()关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据

字符流

简介:最小单位是单个字符

文件字符输入流:Reader

作用:以内存为基准,把磁盘文件中的数据以字符的形式读取到内存中去。

构造器说明
public FileReader(File file)创建字符输入流管道与源文件对象接通
public FileReader(String pathname)创建字符输入流管道与源文件路径接通
public int read()每次读取一个字符返回,如果字符已经没有可读的返回-1
public int read(char[] buffer)每次读取一个字符数组,返回读取的字符个数,如果字符已经没有可读的返回-1

一次读取一个字符

package cn.edu.njust.io;

import java.io.FileReader;
import java.io.Reader;

public class Demo01 {
    public static void main(String[] args) throws Exception{
        // 目标:每次读取一个字符
        // 1.创建一个字符输入流管道与源文件接通
        Reader fr = new FileReader("day01\\src\\data.txt");

        // 2.读取一个字符
        int code = fr.read();
        System.out.println((char) code);
        int code1 = fr.read();
        System.out.println((char) code1);

        System.out.println("---------------------");

        // 3.使用循环读取字符(读取真个文件)
        int code2;
        while ((code2 = fr.read()) != -1) {
            System.out.print((char) code2);
        }
    }
}

data.txt文件

相遇的时间从来不分对错,无非是你的胆子太小。

一次读取一个字符数组

文件字符输入流:FileReader
作用:以内存为基准,把磁盘文件中的数据以字符的形式读取到内存中去。

方法名称说明
public int read()每次读取一个字符返回,如果字符已经没有可读的返回-1
public int read(char[] buffer)每次读取一个字符数组,返回读取的字符数,如果字符已经没有可读的返回-1
package cn.edu.njust.io;

import java.io.FileReader;
import java.io.Reader;

public class Demo02 {
    public static void main(String[] args) throws Exception {
        // 目标:每次读取一个字符数组
        // 1.创建一个字符输入流管道与源文件接通
        Reader fr = new FileReader("day01\\src\\data.txt");

        // 2.用循环,每次读取一个字符数组数据
        char[] buffer = new char[1024];
        int len;
        while ((len = fr.read(buffer)) != -1) {
            String rs = new String(buffer,0,len);
            System.out.print(rs);
        }
    }
}

相遇的时间从来不分对错,无非是你的胆子太小。

文件字符输出流:FileWriter

作用:以内存为基准,把内存中的数据以字符的形式写出到磁盘文件中去的流。

构造器说明
public FileWriter(File file)创建字符输出流管道与源文件对象接通
public FileWriter(File file,boolean append)创建字符输出流管道与源文件对象接通,可追加数据
public FileWriter(String filepath)创建字符输出流管道与源文件路径接通
public FileWriter(String filepath,boolean append)创建字符输出流管道与源文件路径接通,可追加数据

FileWriter常用API

方法名称说明
void write(int c)写一个字符
void write(char[] cbuf)写入一个字符数组
void write(char[] cbuf, int off, int len)写入字符数组的一部分
void write(String str)写一个字符串
void write(String str, int off, int len)写一个字符串的一部分
flush()刷新流,还可以继续写数据
close()关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据

资源释放方式

try-catch-finally

简介

  • finally:放在try-catch后面的,无论是正常执行还是异常执行代码,最后一定要执行,除非JVM退出。
  • 作用:一般用于进行最后的资源释放操作(专业级做法)

try-with-resource

在这里插入图片描述

注意

  • JDK 7 以及 JDK 9的()中只能放置资源对象,否则报错
  • 什么是资源呢?
  • 资源都是实现了Closeable/AutoCloseable接口的类对象
    • public abstract class InputStream implements Closeable {};
    • public abstract class OutputStream implements Closeable, Flushable{} ;

快速链接

第1篇:Java基础部分–假期复习(关于String类的一些知识点)
第2篇:JavaSE_提高–static关键字、多态、部分常用API
第3篇:Java中的日期与时间、包装类、正则表示式简述、Arrays类、Lambda表达式的使用
第4篇:Java中的常用集合,包括List系列和Map系类、以及正则表达式的简单应用和红黑树原理
第5篇:JavaSE不可变集合、异常处理、Stream流
第6篇:Java中使用日志框架
第7篇:Java中的字符集和IO流
第8篇:Java中的线程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拜见老天師

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值