一:Java.io包
1、 File
File类是对文件系统中文件和文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。File类保存文件和文件夹的各种元数据信息,包括
获取文件信息:
文件名(File.getName),文件长度(file.length),文件路径(file.getPath),文件是否为目录(file.isFile), 获取文件列表(file. list ());
对文件进行操作:
新建文件夹(file.mkdirs),新建文件(file.createNewFiles),删除文件(file.delete()),
重命名(file.reName())
2、数据流的特点:字节流和字符流
数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流。数据写入程序可以是一段、一段地向数据流管道中写入数据,这些数据段会按先后顺序形成一个长的数据流。对数据读取程序来说,看不到数据流在写入时的分段情况,每次可以读取其中的任意长度的数据,但只能先读取前面的数据后,再读取后面的数据。不管写入时是将数据分多次写入,还是作为一个整体一次写入,读取时的效果都是完全一样的。
3、InputStream,FileInputStream, ObjectInputStream(输入流)
InputStream是抽象类,是所有字节输入流的超类,FileInputStream和ObjectInputStream都是InputStream的子类。
FileInputStream 文件输入流,用于读取本地文件中的字节数据
对象创建方式:
1、 InputStream fis = new FileInputStream(“file.path”); 通过文件路径
2、 InputStream fis = new FileInputStream(“File file”); 通过文件对象
核心方法:
FileInputStream使用read方法将流中的内容输入到byte数组中。
read()的返回值为int,
fis.read()读取一个字节的内容,返回字符的ASCII码,如果输入流结束,返回-1
fis.read(byte[] b):将文件内容输入byte[]b数组中,内容长度为b.length,返回输入到b数组的字节大小。
fis.read(byte[] b, int off, int len):读取从off开始len个字节内容,输入到b数组中,返回输入到b数组的字节大小。其中len的大小必须小于b.length。
文件输入流byte数组大小的确定
已知文件对象file,byte[] b = new byte[(int)file.length];
未知文件对象,使用fis.read(),一个字节一个字节的读取,当fis.read() = -1,即读取结束时为止。
Int len = 0;
Int temp = 0;
While ((temp =in.read()!=-1) {
b[len] = (byte)temp;
len++;
}
fis.close();
System.out.println(newString(b, 0, len);
4、OutputStream,FileOutputStream,ObjectOutputStream:字节输出流
同InputStream类似,OutputStream是一个超类,是所有输出流的父类。
FileOutputStream与FileInputStream相对,FileInputStream是读取本地文件内容到流中,然后read到byte数组中。FileOutputStream是读取流中的内容,然后write到本地文件中。
对象创建方式:
OutputStream fis= new FileOutputStream(“file.path”); 通过文件路径
OutputStream fis= new FileOutputStream(“File file”); 通过文件对象
核心方法:
FileOutputStream使用write将输出流写入文件中,write方法无返回值
创建好输出流fos之后
1、 fos.write(byte[] b) 将 b.length 个字节从指定 byte 数组写入此文件输出流中
2、 fos.write(byte[] b, int off, int len):从off开始,将len个字节写入文件输出流
3、 fos.write(int b):将指定字节写入次文件输出流
5、Reader,InputStreamReader,BufferedReader
Reader是字符输入流的超类
InputStreamReader是字节流向字符流转化的桥梁,它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
其构造方法的默认参数为InputStream 对象,
InputStreamReader(InputStream in),InputStreamReader(Inputstreamin, charset cs)
为了达到最高效率,InputStreamReader通常用法为
BufferedReader in = new BufferedReader(newInputStreamReader(System.in));
BufferedReader:缓冲输入流,包装其他字符输入流,提高读取效率
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
Reader的读取操作开销大,为提高效率使用BufferedReader包装其他Reader(如FileReader和InputStreamReader)
创建对象的方式:
1、 BufferedReader br = new BufferedReader(Reader reader);
如:BufferedReader in = new BufferedReader(newInputStreamReader(System.in));
BufferedReader in = new BufferedReader(new FileReader(“filepath”);
核心方法:
br.read():读取一个字节,返回字节的ASCII码,如果文件读完,则返回-1
br.readLine():读取一行,返回String 字符串,如果文件读完,则返回null
6、,Writer,OutputStreamWriter,BufferedWriter
Writer是字符输出流的超类
OutputStreamWriter:是字符流通向字节流的桥梁,它使用指定的 charset 读取字符并将其解码为字节。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
其构造方法的默认参数为OutputStream 对象,
OutputStreamReader(InputStream in),
OutputStreamReader(Inputstream in, charset cs)
为了达到最高效率,OutputStreamReader通常用法为
BufferedWriter out = new BufferedWriter(newOutputStreamWriter(System.in));
BufferedWriter:缓冲输出流,包装其他字符输出流,提高读取效率
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入Writer的读取操作开销大,为提高效率使用BufferedWriter包装其他Writer(如FileWriter和InputStreamWriter)
创建对象的方式:
1、 BufferedWriter bw = new BufferedWriter(Writer writer);
如:BufferedWriter out = new BufferedWriter (new InputStreamWriter (System.out));
BufferedWriter out = new BufferedWriter(new FileWriter(“filepath”);
核心方法:
br.newLine():写入一个行分隔符
br.write(intc):写入单个字符
br.write(char[]buff, int off, int len):写入字符数组的一部分
br.write(Strings, int off, int len):写入字符串的一部分。
7、序列化与反序列化:ObjectInputStream,ObjectOutputStream
序列化与反序列化的含义:
Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。
序列化的目的:
JAVA提出序列化是为了将对象在
ObjectOutputStream:对象输出流
它的writeObject(Object obj)方法可以对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。
序列化过程:
1、 File file = new File(“path”);
2、 OutputStream fos = new FileOutputStream(file);
3、 ObjectOutputStream oos = new ObjectOutputStream(“fos”);将输出流对象输出到file对象中。
4、 oos.writeObject(Object obj);
5、 oos.flush();
6、 oos.close();
ObjectInputStream:对象输入流
它的readObject()方法可以序列化文件进行反序列化,把字节序列文件转化为对
象。
反序列化过程:
1、 File file = new File(“path”)
2、 InputStream fis = new FileInputStream(file);
3、 ObjectInputStream ois = new ObjectInputStream(fis);
4、 Class obj = (class)ois.readObject();
5、 Ois.close();
实现序列化的两种方式:
1、 类实现Serializable接口,类只有实现了serializable接口,ObjectOutputstream才会去将类的对象序列化,否则会抛出NotSerializableException异常
2、 类继承Externalizable类,