Java IO(六)

1.java.io包下:

File类:java程序中的此类的一个对象 ,就对应着硬盘中的一个文件或网络中的一个资源。

  • File file1=new File("d:\\io\\hello.txt");

  • File file2=new File("d:\\io\\io1")

 >1.File 既可以表示一个文件(.doc    .xls    .mp3    .avi    .jpg    .dat),也可以表示一个文件目录!

>2.File类的对象是与平台无关的。

 >3.File类针对于文件或文件目录,只能进行新建、删除、重命名、上层目录等等的操作,如果涉及到访问文件的内容,File是无能为力的,只能使用 IO 流下提供的相应的输入输出流来实现。

  >4.常把File类的对象作为形参传递给相应的输入输出流的构造器中!

2.IO 流的结构

抽象基类:

Java IO(六)

3.IO 流的划分

1)按照流的流向不同:输入流、输出流(站着程序的角度)

2)按照流中的数据的单位的不同:字节流 、字符流(纯文本文件使用字符流,除此之外,使用字节流)

3)按照流的角色的不同:节点流、处理流(流直接作用于文件上是节点流(4个),除此之外都是处理流)

4.♥♥♥♥♥♥

 抽象基类                 节点流(文件流)                                                   缓冲流(处理流的一种,可以提升文件操作的效率)
InputStream            FileInputStream ((int read(byte[] b)                   BufferedInputStream ((int read(byte[] b)

OutputStream         FileOutputStream (void write(b,o,len)                BufferedOutputStream  (flush())(void write(b,o,len)               

Reader                     FileReader (int read(char[] c))                               BufferedReader  (readLine())(int read(char[] c)) 或String readline()

Writer                      FileWriter(void write(c,0,len) )                               BufferedWriter  (flush())(void write(c,0,len) 或 void write (String str))

最后需要flush (处理流需要清空一下)

注:1.从硬盘中读入一个文件,要求此文件一定要存在,若不存在,报FileNotFoundException的异常

       2.从程序输出一个文件到硬盘,此文件可以不存在,若不存在,就创建一个实现输出。若存在,则将一存在的文件覆盖

       3.真正开发时,就使用缓冲流来代替节点流

       4.注意要关闭相应的流,先关闭输出流,在关闭输入流。将此操作放入finally.

5.其他的流

    1.转换流,实现字节流与字符流之间的转换。

                    InputStreamReader:输入时,实现字节流到字符流的转换。提高操作的效率(前提:数据是文本文件) ===》解码:字节数组--->字符串

                    OutputStreamWriter:输出时,实现子符流到字节流的转换。 编码:字符串--->字节数组

栗子:从键盘输入字符串,要求将读取到的整行字符串转成大写输出。然后继续进行输入操作,直至当输入“e”或者“exit”时,退出程序。

    2.标准输入输出流:

        System.in:标准的输入流:从键盘输入数据

        System.out: 标准的输出流:从显示器输出数据

    3.打印流(都是输出流)    PrintStream(处理字节)     PrintWriter (处理字符)  

    •  可以使用System.setOut(PrintStream  p)重新设置一下输出的位置。PrintStream  p=new PrintStream( new FileOutputStream("hello.txt"),true);

    4.数据流    (处理基本数据类型、String、字符数组)

    • DataInputStream        DataOutputStream

    5.对象流    (用来处理对象的)

    • 对象的序列化机制:允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象

    • ObjectInputStream( Object readObject())            ObjtectOutputStream(void writeObject(Object obj))

    • 如何创建流的对象:ObjectOutputStream  oss = new  ObjectOutputSteam(new FileOutputStream(new File("person.txt")))

                                              ObjectInputStream  ois =  ew  ObjectInputStream(new FileInputStream(new File("person.txt")))     

    • 实现序列化机制的对象对应的类的要求:① 要求类要实现Serializable接口        ②同样要求类的所有属性也必须实现Serializable接口

                                                                        ③要求给类提供一个序列版本号: private  static  final  long  serialVersionUID;

                                                                        ④属性声明为static 或 transient ,不可以实现序列化

    6.随机存取文件流 : RandomAccessFile

  • 既可以充当一个输入流,又可以充当一个输出流 : public RandomAccessFile( File file, String mode )

  • 支持从文件的开头读取、写入。若输出的文件不存在,直接创建。若存在,则是对原有文件内容的覆盖。
  • 支持从任意位置的“插入” 。

你可能感兴趣的:(Java IO(六))