【Java基础篇】Java IO篇(二)

1. File类

用来将文件或者文件夹路径封装成对象,方便对文件与文件夹进行操作。File对象可以作为参数传递给流的构造函数。

1.1 File类常见方法:

创建。

  • boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。
  • boolean mkdir():创建文件夹。
  • boolean mkdirs():创建多级文件夹。

删除

  • boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回false。
  • void deleteOnExit();在程序退出时删除指定文件。

判断。

  • boolean exists() :文件是否存在.
  • isFile():
  • isDirectory();
  • isHidden();
  • isHidden();

获取信息。

  • getName():
  • getPath():
  • getParent():
  • getAbsolutePath()
  • long lastModified()
  • long length()

1.2 递归

  • 函数自己调用自己。
  • 注意:递归时一定要明确结束条件。
  • 应用场景:
    • 当某一功能要重复使用时。

2. Properties

PropertiesHashtable的子类,也就是说它具备map集合的特点。而且它里面存储的键值对都是字符串。是集合中和IO技术相结合的集合容器。
该对象的特点:可以用于键值对形式的配置文件。那么在加载数据时,需要数据有固定格式:键=值。

3. 打印流

该流提供了打印方法,可以将各种数据类型的数据都原样打印。

3.1 字节打印流PrintStream

构造函数可以接收的参数类型:

  • file对象。File
  • 字符串路径。String
  • 字节输出流。OutputStream

3.2 字符打印流PrintWriter

构造函数可以接收的参数类型:

  • file对象。File
  • 字符串路径。String
  • 字节输出流。OutputStream
  • 字符输出流,Writer。

4. 对象序列化

4.1 ObjectOutputStream

可以将实现了Serializable的接口的对象转成字节写出到流中

4.2 ObjectInputStream

可以从流中读取一个ObjectOutputStream流写出的对象

5. 管道流

PipedInputStream:管道输入流,可以从管道输出流中读取数据
PipedOutputStream:管道输出流,可以向管道输入流中写出数据

在建立管道输出流时可以在构造方法中将管道输入流传入,或者用connect()方法将输入输出流接上,
建议:输出与输入在两个不同的线程进行操作

6. 随机读写 RandomAccessFile

该类不是算是IO体系中子类。而是直接继承自Object。

7. 操作基本数据类型的流

DataInputStreamDataOutputStream,可以按照基本数据类型占用空间大小读写数据

8. 操作字节数组的流

  • ByteArrayOutputStream: 写出到字节数组(内存)中,可以获取写出的内容装入一个字节数组。通常我们用这个流来缓冲数据。
  • ByteArrayInputStream:可以从一个字节数组中读取字节
  • CharArrayWriter:写出字符到字符数组(内存)中,可以获取写出的内容装入一个字符数组。
  • CharArrayReader:可以从一个字符数组中读取字符。

用于操作字节数组的流对象。

  • ByteArrayInputStream :在构造的时候,需要接收数据源,。而且数据源是一个字节数组。
  • ByteArrayOutputStream: 在构造的时候,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组。
/*字节数组输入流 ByteArrayInputStream
*
*
* */
public class Demo5 {
    public static void main(String[] args) throws IOException {
        byte[] bytes = "hello world!".getBytes();
      InputStream byteArrayInputStream = new ByteArrayInputStream(bytes);  //发生多态  继承,重写,父类的引用指向子类
        byte[] bytes1 = new byte[1024];
        int  temp;
        while((temp=byteArrayInputStream.read(bytes1,0,bytes1.length))!=-1){
            String str = new String(bytes1,0,temp);
            System.out.println(str);
        }
    }
}
/*字节数组输出流 ByteArrayOutpurStream
*
*
* */
public class Demo6 {
    public static void main(String[] args) throws IOException {
        ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();//创建一个新的 byte 数组输出流。
        byte[] data="hello world!世界".getBytes();
        arrayOutputStream.write(data);
        byte[] bytes = arrayOutputStream.toByteArray();
        System.out.println(bytes.length+"----"+new String(bytes));
        byte[] s = new String("世界你好").getBytes();
        System.out.println(s.length+"---"+new String(s));
    }
}

9. 字符编码

9.1 码表

ASCII:英文码表,每个字符占1个字节。A是65,a是97
GB2312:兼容ASCII,包含中文,每个英文占1个字节(正数),中文占2个字节(2个负数)。
GBK:兼容GB2312,包含更多中文,每个英文占1个字节(正数),中文占2个字节(第一个负数、第二个可正可负)。
Unicode:国际码表,每个字符占2个字节。Java中存储字符类型就是使用的Unicode编码。
UTF-8:国际码表,英文占1个字节,中文占3个字节。

java提供了StandardCharsets类
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李熠漾

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

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

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

打赏作者

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

抵扣说明:

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

余额充值