Java IO流基础


File

File类是java.io包下代表与平台无关的文件与目录,也就是说如果希望在程序中操作文件和目录都可以通过File类来完成,值得指出的是不管是文件、还是目录都是使用File来操作的,File能新建、删除和重命名文件和目录,File不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。


File类可以使用文件路径字符串来创建File实例,该文件路径字符串可以是绝对路径,也可以是相对路径。默认情况下,系统是根据用户的工作路径(项目所在路径)来解释相对路径的,这个路径由系统属性“user.dir”指定,通常也就是运行Java虚拟机时所在的路径。

System.setProperty(key, value);

System.getProperty(key);

可重新设置默认路径。

File类的 isAbsolute():判断File对象所对应的文件或目录是否是绝对路径。在Unix/Linux/BSD等系统上,如果路径名开头是一条斜线(/),则说明该File对象对应一个绝对路径;在windows等系统上,如果路径开头是盘符,则说明是一个绝对路径。


File主要提供了文件过滤器:FilenameFilter接口,可以指定哪些文件是我们要操作的,即进行过滤。


IO

输入输出的判定:划分输入/输出流时是从程序运行所在的内存来判定的。

字节流和字符流

Java 内用 Unicode 编码存储字符。字符流处理的单元为 2 个字节的Unicode 字符(16位),分别操作字符、字符数组或字符串;而字节流处理单元为 1 个字节(8位),操作字节和字节数组。

字节流主要有InputStreamOutputStream作为基类,而字符流则主要由ReaderWriter作为基类。

节点流和处理流

这是按照流的角色进行划分的。可以从/向一个特定的IO设备(如磁盘、网络)读/写数据的流,称为节点流(低级流);处理流则用于对一个已存在的流进行连接或封装,通过封装后流来实现数据读/写功能,处理流也成为高级流。

InputStream

abstract  int

read() 从输入流中读取数据的下一个字节。

int

read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。

int

read(byte[] b, int off, int len) 将输入流中最多len 个数据字节读入byte数组

Reader

int

read() 读取单个字符。

int

read(char[] cbuf) 将字符读入数组。

abstract  int

read(char[] cbuf, int off, int len) 将字符读入数组的某一部分。

OutputStream


void

flush() 刷新此输出流并强制写出所有缓冲的输出字节。

void

write(byte[] b) b.length 个字节从指定的 byte 数组写入此输出流。

void

write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量off 开始的len 个字节写入此输出流。

abstract  void

write(int b) 将指定的字节写入此输出流。

Writer

abstract  void

flush() 刷新该流的缓冲。

void

write(char[] cbuf) 写入字符数组。

abstract  void

write(char[] cbuf, int off, int len) 写入字符数组的某一部分。

void

write(int c) 写入单个字符。

void

write(String str) 写入字符串。

void

write(String str,  int off, int len) 写入字符串的某一部分。


文本保存时是采用的GBK编码


输入输出流体系

002926906.jpg


通用规则:如果需要进行输入输出的内容是文本内容,则考虑使用字符流,如果需要进行输入输出的是二进制内容,则考虑使用字节流。


Tip:通常所有能用记事本打开并看到其字符内容的文件我们称之为文本文件,反之则称为二进制文件。



重定向标准输入/输出

Java的标准输入输出System.inSystem.out,默认情况下分别代表键盘和显示器。

static void

setErr(PrintStream err)   重新分配标准错误输出流。

static void

setIn(InputStream in) 重新分配标准输入流。

static void

setOut(PrintStream out) 重新分配标准输出流。


Java虚拟机读写其他进程的数据

Runtime对象的exec方法可以运行平台上的其他程序,该方法产生一个Process对象,该对象代表由该Java程序启动的子进程,Process提供方法让程序和子进程进行通信。

Process  p =  Runtime.getRuntime();

abstract  InputStream

getErrorStream()   获取子进程的错误流。

abstract  InputStream

getInputStream()  获取子进程的输入流。

abstract  OutputStream

getOutputStream()  获取子进程的输出流。


RandomAccessFile

任意读取文件内容,它就可以读取文件内容,也可以向文件输出数据。


对象的序列化

对象序列化的目标是将对象保存到磁盘中,或允许在网络中直接传输对象,对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久保存在磁盘上,通过网络将这种二进制传输到另一个网络节点。其他程序一点获得了这种二进制流(无论是从磁盘中获取,还是通过网络获取),都可以将这种二进制流恢复成原来的Java对象。


JavaIO

JavaNIO相关的包



注:

AudioInputStreamCipherInputStreamDeflaterInputStreamZipInputStream等是用于具有访问音频文件,加密解密,压缩解压等功能的字节流。


------内容来自《疯狂java讲义》.李刚



你可能感兴趣的:(java,IO流基础)