1. File类

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

1.1 File类常见方法:

  1. 创建。
  • boolean createNewFile():在指定位置创建文件,如果该文件已经存在,则不创建,返回false。和输出流不一样,输出流对象一建立创建文件。而且文件已经存在,会覆盖。
  • boolean mkdir():创建文件夹。
  • boolean mkdirs():创建多级文件夹。
  1. 删除
  • boolean delete():删除失败返回false。如果文件正在被使用,则删除不了返回false。
  • void deleteOnExit();在程序退出时删除指定文件。
  1. 判断。
  • boolean exists() :文件是否存在.
  • isFile():
  • isDirectory();
  • isHidden();
  • isHidden();
  1. 获取信息。
  • 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: 在构造的时候,不用定义数据目的,因为该对象中已经内部封装了可变长度的字节数组。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*字节数组输入流 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);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*字节数组输出流 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个字节。