`

IO流

    博客分类:
  • Io
Io 
阅读更多
                      IO包summarize
  以前学了Lang包还有Util(集合)包,以前的lang(基础)包,不需要导入就可以使用,而util(集合)包就要导入,现在IO(输入输出流)也是要导入才能使用的,如果不导入,就会报错
  IO流(input / output stream)
  File类
      代表与平台无关的文件和目录操作类
  A:访问文件名相关的方法
String getName()返回此File对象所表示的文件名或路径名(最后一级的文件夹名)
String getPath()返回此File对象所对应的路径名(跟创建相关)
File getAbsoluteFile()返回此File对象所对应的绝对路径所对应的file对象
String getAbsolutePath()返回此File对象所对应的绝对路径名(完整路径)
String getParent()返回此File对象对应目录(最后一级子目录)的父目录名
   B:文件检测相关的方法
boolean exists()判断File对应的文件或目录是否存在
boolean canWrite()判断File对象对应的文件或目录是否可写
boolean canRead()判断File对象对应的文件或目录是否可读
boolean isFile()判断File对象所对应的是否是文件,不是目录
boolean isDirectory()判断File对象所对应的是否是目录,不是文件
boolean isAbsolute()判断File对象所对应的文件或目录是否是绝对路径,在Windows等系统上,如果路径开头是盘符,则说明它是一个绝对路径
   C:获取常规文件信息
long lastModified()返回文件的最后修改时间
long length()返回文件内容的长度
   D:文件操作的相关方法
boolean createNewFile()当此File对象所对应的文件不存在时,该方法将新建一个该File对象所指定的新文件,创建成功返回true,否则返回false
boolean delete()删除File对象所对应的文件或路径
static File createTempFile(String prefix,String suffix)在默认临时文件目录中创建一个临时的空文件,使用给定前缀,系统生成的随机数和给定后缀作为文件名
   E:目录操作的相关方法
boolean mkdir()只能创建一个目录(文件夹)
boolean mkdirs()一次性可以创建多个目录(文件夹)
String [] list()列出File对象所有的子文件名和路径名,返回String数组
File [] listFiles()列出File对象的所有子文件和路径,返回File数组
static File[] listRoots()列出系统所有的跟路径,这是静态方法,可以直接调用
理解IO流
  什么是流?
      不同的输入/输出源(键盘,文件,网络连接等)抽象表述为“流”,(stream);stream是从起源(source)到接收(sink)的有序数据
流的分类:
  按照流的流向: 输入流和输出流
  输入流:只能从中读取数据,而不能向其写出数据
  输出流:只能向其写出数据,而不能从中读取数据
  按照流的数据单位的大小不同:字节流和字符流
  字节流:流动的数据最小单位是字节,也把字节流称为低级流
  字符流:流动的最小单位是字符
  按照流的功能分:节点流和处理流
  节点流:可以从/向一个特定的IO设备(如磁盘,网络/读/写数据的流)称为节点流,节点流常常也称为低级流
  处理流:对一个已存在的流进行连接或封装,通过封装后流来实现数据/读/写的功能,处理流也称为高级流
IO流的框架
  字节流的父类(抽象类(Abstract))
      InputStream:所有字节输入流的父类
      OutputStream:所有字节输出流的父类
  字符流的根类(抽象类)
      Reader:所有字符流的输入父类
      Writer:所有字符流的输出父类
InputStream(字节输入流)和Reader(字符输入流)
int read()从输入流中读取单个字节,返回所读取的字节数据(字节数据可以直接转换为int类型)








int read(byte[] b)从输入流中读取最多b.length个字节的数据,并将其存储在字符数组中,返回实际读取的字节数
int read(byte[] b,int off,int len)从输入流中读取最多len字节的数据,并将其存储在字节数组b中,并不是从数组起点开始,而是从off位置开始,返回实际读取的字节数
Reader的常用方法
1.    int read()从输入流中读取单个字符
2.int read(char[] b)从输入流中读取最多b.length个字节的数据,并将其存储在字符数组中,返回实际读取的字符数
3.int read(char[] b,int off,int len)从输入流中读取最多len字节的数据,并将其存储在字节数组b中,并不是从数组起点开始,而是从off位置开始,返回实际读取的字符数
OutputStream和Writer
void write(int c)将指定的字节输出到输出流中
void write(byte[] b)将字节数组中的数据写人到指定输出流中
void write(byte[] b,int off,int len)将字节数组从off位置开始,长度为len,字节写人到输出流中
Writer的常用方法
1.  void write(int c)将指定的字符输出到输出流中
2. void write(char [] b)将字符数组中的数据写人到指定输出流中
3. void write(char [] b, int off,int len)将字符数组从off位置开始,长度为len,字节写人到输出流中
常用方法:
void()关闭流
void mark(int readLimit)标记流
void reset()重新回到mark标记(将记录指针会退到mark标记处)
boolean markSupported()判断此输入流是否支持mark和reset方法
long skip(long n)可以跳过(放弃)n个数据字节
void flush()刷新此输出流并强制写出所有缓冲的输出字节
BufferedInputStream类和BufferedInputStream类
  缓冲流的作用:增加缓冲功能,可以提高输入输出的效率
管道流(PipedInputStream(输入流)和PipedOutputStream(输出流))
  作用:主要用于线程之间的通讯
DateInputStream和DateOutputStream
  用于读/写基本数据类型和String对象
PushbackInputStream
void unread(byte [ ] b)回退一个字节数组
void unread(byte [ ] b, int off, int len)回退一个字节数组
void unread(int b)回退一个字节
对象序列化(重点)
什么是对象序列化?
把“对象”任一时刻的状态,保存到外部介质的过程就叫序列化
什么是对象反序列化
反序列化是从外部介质读取数据并将数据还原成当初的“对象”的状态
实现对象序列化
a:实现Serializeble标志接口(简单)
b:实现Externalizable接口(自定义序列化)
递归序列化
当对某个对象进行序列化时,系统会自动把该对象的所有属性依次进行序列化,如果某个属性引用到另一个对象,则被引用的对象也会被序列化,如果被引用的对象的属性也引用了其他对象,则被引用的对象也会被序列化,这种被称为递归序列化
对象引用序列化
Java序列化机制
   a:所有保存到磁盘中的对象都有一个序列化编号
   b:当程序试图序列化一个对象时,程序将先检查该对象是否已经被序列化过,只有当该对象从未被序列化过,系统才会将该对象转换成字节序列并输出
transient变量
transient变量在序列化时不会被保存,如果是对象反序列化后就是null,如果是本类型,就是int(0),boolean(false),double(0.0)
自定义序列化 (Externalizable接口中的两个序列化与反序列化的方法)
a. void readExternal(ObjectInput in)显示自定义序列化的方法,用来恢复数据
b.void writeExternal(ObjectOutput out)实现自定义序列化的方法
     8. 两种序列化机制的比较
   实现Serializable接口:
   a. 系统自动存储必要信息
   b. java内建支持,易于实现,只需实现接口即可
   c. 无须任何代码支持,性能略差
   实现Externalizable接口:
   a. 程序员决定存储那此信息。
   b. 仅仅提供两个空方法,实现该接口必须为两个空方法提供实现。
   c. 性能略高。

9. 对象序列化注意问题
   a. 对象的类名,属性都会被序列化;方法,static属性,transient属性都不
      会被序列化
   b. 反序列化时必须有序列化对象的class文件
   c. 当通过文件,网络来读取序列化对象时,必须按实际写入的顺序读取
字符流:
转换流:InputStreamReader将字节输入流转换成字符输入流
OutputStreamWriter将字节输出流转换成字符输出流
  作用:
      转换成字符流操作更加方便一些
  BufferedWriter
  构造方法:
      BufferedWriter(Writer out)构造一个默认大小的缓冲区输出流
      BufferedWriter(Writer out,int size)指定一个具体大小的缓冲区输出流
          1.void newLine()换行
  BufferedReader
  构造方法:
      BufferedReader(Reader in)构造一个默认大小的缓冲字符输入流
      BufferedReader(Reader in,int size)指定一个具体大小的缓冲字符输入流
  LineNumberReader
    1.String readLine()读取一个问本行
    2.int getLineNumber()获得当前行号
    3.void setLineNumber(int C)设置当前行号
CharArrayReader 和 CharArrayWriter
  构造方法:CharArrayWriter()构建一个默认大小的字符输出流
            CharArrayWriter(int size)创建一个指定大小的字符输出流
void reset()清空缓冲区
int size()返回缓冲区大小
void writeTo(Writer out)将缓冲区的内容写入另一个字符流
PrintStream(打印流)
  构造方法:
    PrintStream(File file)构建一个以文件为输出源的打印流,将信息打印到文件
    PrintStream(OutputStream out)构建一个以输出流为源头的打印流,将信息打印到输出流,输出流可以是文件,终端(显示器),内存,网络
    PrintStream(OutputStream out,boolean autoFlush)构建一个打印流,autoFlush如果为true,则每当写入字节数组,调用其中一个println方法或写入新行字符或字节(‘\n’)时,都会刷新缓冲区
    PrintStream(String fileName)创建具有指定文件名称且不带自动行刷新的新打印流
什么是终端?
  System.out代表输出到终端
常用方法:
  PrintStream format(String format,Object … args)
  参数format:用于指定输出格式:%d,%c,%f,%b,%s
  %nd:n代表输出宽度
  PrintStream print(String format,Object … args)
  用于格式化输出,同上
  PrintWriter类跟PrintStream都用于打印输出,一个操作字符,另一个操作字节
RandomAccessFile:随即访问文件流
  既可以支持读的功能,也可以支持写的功能,支持“任意访问”的方式,可以直接转到文件的任意地方来读写数据
Long getFIlePointer()返回文件记录指针的当前位置
Void seek(long  pas)将文件记录指针定位到pas位置
还有一系列的read()和write()方法
构造方法:
  RandomAccessFile(File file,String mode)
  RandomAccessFile(String name,String mode)
  “Mode”参数:
      “r”以只读方式打开指定文件,如果试图对该RandomAccessFile执行写入方法都将会抛出IOException异常
       “rw”以读取、写入的方式打开指定文件,如果该文件不存在,则尝试创建新文件

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics