---------------------- android培训、java培训、期待与您交流! ----------------------
今天刚收到基础测试通过的邮件,所以把前两天写的笔记汇总都贴上来。在java程序中,对于数据的输入和输出操作都以“流”(stream)方式进行;J2SDK提供了各种各样的“流”类,用以获取不同种类的数据。
1.File类
File 类是IO包中唯一代表磁盘文件本身信息的类,而不是文件中的内容。
File类定义了一些与平台无关额方法来操纵文件,例如,创建、删除文件和重命名文件。
Java中的目录被当作一种特殊的文件使用,list方法可以返回目录中的所有子目录和文件名。
在Unix下的路径分隔符为/,在Dos下的路径分隔符为/,Java可以正确处理Unix和Dos路径的分隔符。
获取文件的各种属性的方法:
list()返回所有子目录和文件名
exists() 判断是否存在
delete()删除
creatNewFile() 创建新文件
getPath()获取路径
getParent()获取文件父目录
getAbsolutePath()获取文件的绝对路径
getName()获取文件名
canRead()判断文件是否可读
isDirectory()是否是父目录
laseModified() 修改时间 返回long型时间值 // new Date(file.lastModified()
2.RandomAccessFile类
1)RandomAccessFile类提供了众多的文件访问方式。
2)RandomAccessFile类支持“随机访问”方式。应用:多线程下载。每个线程下载的文件大小不同,且同时读取,从文件的不同位置开始读。
3)RandomAccessFile类在随机(相对顺序而言)读写等长记录格式(文件存储的信息是一条一条的记录,例如:日志文件、员工信息单等)的文件时有很大的优势。
4)RandomAccessFile类仅限于操作文件,不能访问其他IO设备,如网络,内存映像等。5)两种构造方法:
new RandomAccessFile(f, “nw”); //读写方式
new RandomAccessFile(f, “r”); //只读方式
方法:
skipBytes(字节数)跳到对应字节数
read(字节数)——返回值int类型
seek(字节数)绝对定位,定位到文章到第几个字节处
seekbyte(字节数)在原有定位字节基础上,跳转到对应的位置
close()关闭文件对象
read()读取数据
3.流的概念:
字节流 | 字符流 | |
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
一、InputStream类:用于向程序中输入数据,数据单位(8bit)
InputStream类的方法:
int read() ——用于获取读到的字节数遇到流的结束,返回值-1,如果读不到数据会发生阻塞
int read(byte[] b)
int read(byte[] b,int off,int len)
long skip(long n)——用于包装类的流的跳转
int available()——返回当前输入流中可读的字节数,一般用于检查流中是否有数据可读取,
同时也可以避免流发生阻塞 (read()方法如果未读到数据则会发生阻塞)。
void mark(int readlimit)——在输入流中建立标记,在建立标记的位置开始计算最多还能读取多少字节的内容。
void reset()——和mark()方法配合使用,让其指针回到以前的标记处
boolean markSupported()—— 返回当前的流对象是否支持mark()和reset()操作
void close()——关闭流,释放与流相关的资源
有了垃圾回收器,为什么还要调用close方法:
垃圾回收期只能产生类对象,而InputStream在实例化后多产生系统的类。
二、OutputStream类也是抽象类,也没有对应到具体的流设备,只是描述流设备输出时的共性。
OutputStream类的方法:
void write(int b)——将整数字节最低字节流的内容写到数据当中
void write(byte[] b)
void write(byte[] b.int off,int len)
void flush()——用于将内存缓冲器的内容彻底的清空,并输出到目标IO设备当中
void close()——关闭输出流对象
三、FileInputStream类
创建的两种方式:
1)FileInputStream One = new FileInputStream("路径")
2)File f=new File("路径");FileInputStream Two = new FileInputStream(f);
FielOutputStream类——若文件已存在,则内容会覆盖。
PipedInputStream类PipedOutputStream类
用于在应用程序中创建通信管道通信。主要完成线程之间的通信。
ByteArrayInputStream与ByteArrayOutputStream类
用于以IO流的方式来完成对字节数组内容的读写
1、Sytstem.in 链接到键盘,是InputStream类型的实例对象。System.out 链接到显示器,是PrintStream类的实例对象。
2、不管各种底层屋里设备用什么方式实现数据的终止点,InputStream的read方法总是返回-1来表述输入流的结束
字符编码:
ASCII美国标准信息交换码 一个字节 说这些数字都在0-127之间。
unicode编码
ISO符号统一编码,称为unicode编码
占用两个字节,还保留两千多个数值没有用于字符编码
utf-8编码ascii码保持原样,仍然只占用一个字节,对于其他国家的字符,utf-8使用两个或三个字节来表示。
一字节表示:0xxxxxxx
二字节表示:110xxxxx 10xxxxxx
三字节表示:1110xxxx 10xxxxxx 10xxxxxx
优点:
1不出现ox00字节
2便于应用程序检测数据在传输过程中是否发生错误
3直接处理使用ascii码的英文文档
缺点:
某些字符用了三字符
utf-16编码
utf-16编码在unicode基础上进行了细节的扩充,增加了对unicode编码没有包括的字符的表示方式。
一个使用unicode编码的字符就是utf-16格式的
utf-16扩充的字符 占用四字节
处理流
1.数据流
DateOutputStream和DataInputStream提供往各种输出流对象中写入各种原始类型数据的方法。
2.缓冲流
bufferedInputStream和bufferedOutputStream
为I/O增加了内存缓冲区,具有两个目的:
1)允许java程序依次不只操作一个字节,提高的程序性能。2)有了缓冲区,使得流在执行上skip、mark、reset方法都成为可能。
BufferedReader和BufferedWrite类BufferedReader的readLine方法依次读取一行文本
BufferedWrite的newLine方法可以想字符流中写入不同操作系统下的换行符
程序——》DataOutputStream——》BufferedOutputStream——》FileOutStream——》文件
程序《——DataInputStream《——BufferedInputStream《——FileInputStream《——文件关闭流栈中的最上层流对象,将会自动关闭流栈中所有底层的流对象。
3.Print 输出流:
1)包括PrintStream 和PrintWriter
2)PrintStream 永远不会抛出 IOException
3)自动flush功能
setout():重新分配“标准”输出流。
4.ObjectInputStream类与ObjectOutputStream类
直接将Object写入或者写出,其读写的对象必须实现了Serializable接口(序列化)。对象中的transient和static类型的成员变量不会被读取和写入。
1)transient:透明的 可修饰成员变量 ,在序列化的时候不考虑 transient int k = 15
2)Serializable:标记型接口,如果想把某个类的对象序列化,必须实现Serializbale接口。……
class T implement Serializable{
int i = 9;
double d = 2.3;
transirent int k = 15;
}
……
5.转换流 InputStreamReader和OutputStreamWriter,是用于将字节流转换成字符流来读写的两个类.避免频繁的在字节间进行转换,最好不要直接使用inputstreamreader和outputStreamWriter读写数据,应尽量使用BufferedReader类包装inputstreamreader,用BufferedWriter类包装outputStreamWriter.
---------------------- android培训、 java培训、期待与您交流! ---------------------- 详细请查看: http://edu.csdn.net/heima