您的位置:首页 > 编程语言 > Java开发

Java IO流基础

2013-12-09 00:32 337 查看
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位),操作字节和字节数组。
字节流主要有InputStream和OutputStream作为基类,而字符流则主要由Reader和Writer作为基类。
节点流和处理流
这是按照流的角色进行划分的。可以从/向一个特定的IO设备(如磁盘、网络)读/写数据的流,称为节点流(低级流);处理流则用于对一个已存在的流进行连接或封装,通过封装后流来实现数据读/写功能,处理流也成为高级流。
InputStream
abstract intread() 从输入流中读取数据的下一个字节。
intread(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。
intread(byte[] b, int off, int len) 将输入流中最多len 个数据字节读入byte数组
Reader
intread() 读取单个字符。
intread(char[] cbuf) 将字符读入数组。
abstract intread(char[] cbuf, int off, int len) 将字符读入数组的某一部分。
OutputStream

voidflush() 刷新此输出流并强制写出所有缓冲的输出字节。
voidwrite(byte[] b) 将b.length 个字节从指定的 byte 数组写入此输出流。
voidwrite(byte[] b, int off, int len) 将指定 byte 数组中从偏移量off 开始的len 个字节写入此输出流。
abstract voidwrite(int b) 将指定的字节写入此输出流。
Writer
abstract voidflush() 刷新该流的缓冲。
voidwrite(char[] cbuf) 写入字符数组。
abstract voidwrite(char[] cbuf, int off, int len) 写入字符数组的某一部分。
voidwrite(int c) 写入单个字符。
voidwrite(String str) 写入字符串。
voidwrite(String str, int off, int len) 写入字符串的某一部分。
文本保存时是采用的GBK编码

输入输出流体系




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

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

重定向标准输入/输出
Java的标准输入输出System.in和System.out,默认情况下分别代表键盘和显示器。
static voidsetErr(PrintStream err) 重新分配“标准”错误输出流。
static voidsetIn(InputStream in) 重新分配“标准”输入流。
static voidsetOut(PrintStream out) 重新分配“标准”输出流。
Java虚拟机读写其他进程的数据
Runtime对象的exec方法可以运行平台上的其他程序,该方法产生一个Process对象,该对象代表由该Java程序启动的子进程,Process提供方法让程序和子进程进行通信。
Process p = Runtime.getRuntime();
abstract InputStreamgetErrorStream() 获取子进程的错误流。
abstract InputStreamgetInputStream() 获取子进程的输入流。
abstract OutputStreamgetOutputStream() 获取子进程的输出流。
RandomAccessFile
任意读取文件内容,它就可以读取文件内容,也可以向文件输出数据。

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

JavaIO
Java中NIO相关的包

注:
AudioInputStream、CipherInputStream、DeflaterInputStream、ZipInputStream等是用于具有访问音频文件,加密解密,压缩解压等功能的字节流。

------内容来自《疯狂java讲义》.李刚
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java IO流基础