IO
I(Input)指从设备上输入数据到程序中;
O(Output)指从程序中向设备中输出数据;
IO是相对于程序而言的。
File类
操作文档和目录。FIle类以一种与平台无关的方式描述一个文件或目录对象的属性。
File类功能
- 获取文件或目录的各种属性信息
- 创建目录
- 对文件或目录改名
- 列出一个目录下所有的文件和子目录
创建File类的方式
File(String pathname):根据文件名创建一个File类对象File(File parent,String child):根据parent目录和child文件名构建一个File对象File(String parent,String child):根据字符串parent目录和child文件名构建一个File对象File(URI uri):根据uri创建一个File对象
Windows和Linux存在路径表示方式的区别,Windows下用\分割路径,所以pathname里需要用\\分割路径,第一个\是转义字符。Linux是/没有问题。
File类常用方法
boolean createNewFile():根据文件路径(构造方法传进来的路径),创建一个文件。如果文件存在会创建失败。boolean mkdirs():创建目录boolean delete():删除文件boolean exists():判断是否已经存在该文件或文件夹File[] list():列出目录中的所有文件和文件夹,可以接受FilenameFilter参数,该参数可以只列出符合条件的文件。在FilenameFilter接口里包含一个accpet(File dir,String name)方法,该方法将依次对指定File的所有子目录,子文件进行迭代。
来个新鲜的栗子:列出指定目录下名称包含java的文件或文件夹
过滤文件名称的类Java_Filter.java

包含当前main类listFiles.java

流
流是Java中输入/输出的抽象表述。
程序想要访问内存、硬盘、网络等IO目的地,全部通过IO流的方法就可以完成,统一了访问方法。
根据数据流方向的不同,可以将数据分为输入流和输出流。
输入流只能从中读取数据,而不能向其写数据;输出流只能向其写出数据,而不能从中读取数据。
字节流
假设硬盘中有数据a中bcd,其中a用一个字节表示,中字用两个字节表示,bcd分别都用一个字节表示,字节输入流,一次只从硬盘上读取一个字节,遇到中字需要读取两次,数据a中bcd一个6个字节,需要读6次。
字节流传送的是字节数据(byte)。
字符流
而字符输入流,一次读取一个字符,中字也是一个字符,使用字符输入流,则之需要读取5次。
字符流传送的是字符数据(char)。
流是一个逻辑概念,它把各种都写操作统一起来。一个字节输入流指向一个字节序列,可从中一次读出字节,用户不必关心它的内部结构、来源。一个字节输出流,可向其依次写入字节,它的去向和内部结构用户同样不必关心。
字节输入流
FileInputStream:表示指向文件的字节输入流ByteArrayInputStream:表示指向内存中的byte数组的字节流ObjectInputStream:用于读取对象FilterInputStream:表示过滤器流DataInputSteam:用于从流中读取基本类型的数据BufferedStream:用于给流增加缓冲的功能
InputStream是字节输入流的顶层父类。
InputStream提供的三个基本的read方法:
int read():读取一个字节int read(byte[] buffer):读取数据到buffer数组中int read(byte[] buffer,int offset,int length):读取数据到buffer数组中的指定位置。
字节输出流
OutputStream为字节输出流的顶层父类。
FileOutputStream:表示输出到文件的字节输出流ByteArrayOutputStream:表示输出到内存的byte数组的字节流ObjectOutputStream:表示对象输出流,用于将对象写入到流中FilterOutputStream:表示过滤器输出流DataOutputStream:用于向流中写入基本类型的数据BufferedOutputStream:用于给流增加缓冲的功能
字节输出流OutputStream,用来向流中写入数据。OutputStream是所有字节输出流的顶层父类。
OutputStream类提供的三个基本write方法:
void write(int c)void write(byte[] buffer)void write(byte[] buffer,int offset,int length)
其他方法:
void close():关闭流void flush():将流中的数据输出
下面一个例子,实现了文件复制功能,综合了输入流输出流和缓存流的知识:

序列化
Java中,很多数据是以对象的方式存在,程序运行后,希望将这些数据储存,以供下次使用,可以使用ObjectInputStream、ObjectOutputStream来做到。将对象写入流中,这个过程称为序列化,写入流中的对象必须要实现接口Serializable,才能对象序列化。
ObjectOutputStream主要方法:
writeObject(Object obj):将对象写入流中flush():将缓冲输出close():关闭流
ObjectInputStream主要方法:
readObject():从流中读取一个对象close():关闭流
字节流
字节流一次读取一个字节的数据,而字符流一次读取一个字符的数据。比如中文,一个字符占用两个字节,使用字节流读取,就会成乱码,而用字符流就可以正常显示。
字符输入流的类
Reader类为字符输入流的顶层父类,子类如下:
StringReader:表示从内存中的String对象中读取数据的字符输入流CharArrayReader:表示从内存中的一个Char数组中读取的字符输入流InputStreamReader:表示一个字节流转换为字符流的工具流FileRead:表示指向文件的字符输入流BufferedReader:表示给字符输入流增加缓冲功能的字符流
Reader类的三个基本方法:
int read():读取一个字符的数据int read(char[] cbuf):将字符数据读取到cbuf数组中int read(char[] cbuf,int offset,int length):将字符数据读取到cbuf数组中从offset处开始写入,写length个字符
Reader的其他方法:
void close():关闭流boolean ready():判断流是否就绪可用skip(long n):从当前位置跳过n个字符不读void reset():关闭流
使用Reader的栗子:

16万+

被折叠的 条评论
为什么被折叠?



