Java基础学习篇(五)之Java.io包

一: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类,

 

你可能感兴趣的:(java,java)