黑马程序员--JAVA基础之IO流
2013-04-22 20:48
369 查看
------------------android培训、java培训、期待与您交流!-----------------------
一 IO流的三种分类方式:1.按照流向来分:
输入流:只能从中读取字节数据,不能向其写出数据
输出流:只能向其写入字节数据,不能从中读取数据
2.按照流所处理的数据类型划分:可分为:
字节流:用于处理字节数据。
字符流:用于处理Unicode字符数据。
3.按照格式可以分为:
节点流(低级流)可以从向一个特定的IO设备(如磁盘,网络)读写数据的流。
处理流(高级流):可以对一个已存在的流的连接和封装,通过所封装的流的功能实现数据读
写功能的流。
二 IO流的四大抽象类:
1.常见InputStream类(读数据)
-低级
InputStream
FileInputStream
ByteArrayInputStream
PipedInputStream
-高级
DataInputStream
BufferedInputStream
2.常见OutputStream(写数据)
-低级
OutputStream
FileOutputStream
ByteArrayOutputStream
PipedOutputStream
-高级
DataOutputStream
BufferedOutputStream
3.常见的Reader类
-低级
CharArrayReader
StringReader
PipedReader
FileReader
-高级
BufferedReader
InputStreamReader
LineNumberReader
4.常见的Writer相关类
-低级
CharArrayWriter
StringWriter
PipedWriter
FileWriter
-高级
BufferedWriter
OutputStreamWriter
PrintWriter
注意:所有高级流都不能直接IO设备(磁盘或网络等)进行直接的交互,必须建立在低级流的基础之上。
三 缓冲流:
BufferedReader -Reader
BufferedWriter
BufferedInputStream -InputStream
BufferedOutputStream
缓冲流输入流 支持其父类的mark()和reset()方法。mark()方法用于“标记”当前位置,就像加入了一个书签,可以使reset()方法返回这个标记重新读取数据。
BufferedReader -readLine() --以r或n分隔
BufferedWriter -newLine() --写入一个行分隔符
BufferInputStream和BufferedOutputStream平时很少用到。
四 InputStream的基本方法
1.int read() throws IOException 读取一个字节以整数形式返回,如果返回-1证明读到文件的末尾。
int read(byte[] buffer) throws IOException 将数据读入一个字节数组,同时返回读取的字节数。
int read(byte[] buffer,int offset,int length) throws IOException 将数据读入一个字节数组,放到数组的offset指定的位置开始,并用length来制定读取的最大字节数。
2.void close() throws IOException 关闭流释放内存资源
3.int available()返回可以ong种读取的字节数。
4.long skip(long n)在输入流中跳过n个字节,将实际跳过的字节数返回
5.boolean markSupported() 判断流是否支持标记功能。
6.void mark(int readlimit)在支持标记的输入流的当前位置设置一个标记。
7.void reset() 返回到流的上一个标记。注意必须支持标记功能。
五 OutputStream的基本方法
1.viod write(int b)throws IOException向输出流写入一个字节数据。
void write(byte[] buffer)
void write(byte[] buffer,int offset,int length)
2.viod flush() 将输出流中缓冲的数据全部写出到目的地。
3.void close() 关闭流
六 Writer的基本方法
1.void write(int c) throws IOException 向输出流中写入一个字符数据。
void write(char[] buffer) 将字符数组buffer中的字符写入到流中
void write(char[] buffer,int offset,int length) 将字符数组buffer中从offset开始的length个字符写入到流中
void write(String str) throws IOException 将一个字符串中的字符写入到输出流
void write(String str,int offset,int length)将一个字符串从offset开始的length个字符写入到输出流
4.void flush() 将输出流中缓冲的数据全部写出到目的地。
七 Reader的基本方法
1.int read() 读取一个字符以整数形式返回,如果返回-1证明已到流的末尾。
int read(char[] buffer)将从流中读出的字符放到字符数组buffer中,返回读出的字符数。
int read(char[] buffer,int offset,int length) 将读出的字符放到字符数组的指定offset开始的空间,每次最多读出length个字符。
2.void close();
3.skip(long n)
4.void mark(int readlimit)
5.void reset()
八 访问文件类
1.FileInputStream和FileOutputStream继承基类用于向文件中输入输出字节
2.FileReader和FileWriter继承基类用于向文件中输入输出字符。
注意:a.输出流在构造函数第二个参数可以设置true,表示在文件的末尾进行追加写入。
b.此类流会抛出FileNotFoundException异常。
九 转换流:主要作用是将字节流转换为字符流。
1.InputStreamReader需要和InputStream套接
2.OutputStreamWriter需要和OutputStream套接
十 数据流与字节数组流:
1.数据流主要为实现可以存取java原始数据类型,如long,boolean等
数据流是字节流
2.DataInputStream需要和InputStream套接
DataOutputStream需要和OutputStream套接
3.DataInputStream的方法:
-readBoolean();readInt();read...
-readUTF()网络传输常用方法,读一个Unicode字符串
4.DataOutputStream方法与DataInputStream中的方法对应
5.此构造函数等于已可以往一个字节数组里输入内容
ByteArrayOutputStream baos = new ByteArrayOutputStream();
此方法为获取一个字节数组方法返回字节数组
baos.toByteArray();
此方法获取字节数组占了多少字节
new ByteArrayInputStream(byte[]).available()
十一 Print流
1.Print流只有输出流没有输入流,PrintWriter和PrintStream分别针对字符和字节
2.提供print和println方法,用于多种数据类型的输出。
3.输出操作不会抛出异常。
4.PrintWriter和PrintStream可设置自动刷新功能。
十二 Object流
1.序列化,用于直接将Object写入或者读出。
2.static和transient关键字修饰的属性是不能被序列化的。
3.需要序列化的类必须实现Serializable接口或者Externalizable
4.方法:
-writeObject(Object obj)
-Object readObject();
若想得到Object的原始类型,需要通过强制转型。
十三 特殊的文件流(RandomAccessFile)
1.RandomAccessFile是一种特殊的文件流,可以用它在文件的任何地方查找或插入数据
2.RandomAccessFile同时实现了DataInput和DataOutput接口,所以可以用它来读写文件
3.构造器
-RandomAccessFile(File file,String mode)
-RandomAccessFile(String file,String mode)
4.利用RandomAccessFile来追加文件内容:
RandomAccessFile rf1 = new RandomAccessFile(c1.txt,rw);
rf1.seek(rf1.length());
rf1.writeBytes(str + n); 此处若想输入的文本看起来是换行的,需加nr
rf1.close();
十四 读取文件匹配流
1. FileInputStreamFileOutputStream
2. FileReaderFileWriter
3. BufferedReaderPrintWriter
十五 File(重点)
1.File类用来操作文件和文件夹的。
把文件和文件夹封装成了一个对象。
2.File的构造方法:
A:File(String pathName):根据指定的路径创建文件的实例
**File f = new File("c:\\a.txt");
B:File(String parent,String child):根据指定的父目录和子目录创建文件的实例
**File f = new File("c:\\","a.txt");
C:File(File parent,String child):根据指定的父文件目录和子目录创建文件的实例。
**File f = new File("c:\\");
File f2 = new File(f,"a.txt");
3.功能方法:
A:创建文件和文件夹:
createNewFile():创建文件
mkdir():创建单级目录
mkdirs():创建多级目录
B:删除
delete():删除文件和文件夹(文件夹内有东西的,先删除里面内容,最后删除文件夹)
C:判断
canExecute():判断是否是可执行文件.文件不存在,多个用户间的使用(自己测试)。
canRead():判断是否可读
canWrite():判断是否可写
boolean isDirectory():判断是否是一个目录
boolean isFile():判断是否是文件
boolean isHidden():判断是否是隐藏文件
D:获取
String getAbsolutePath():绝对路径
String getPath():相对路径
String getName():获取文件的名字
String getParent():获取父目录
long length():返回的是文件的长度(字节)
E:获取
static File[] listRoots():列出可用的文件系统根。
String[] list():返回某个目录下的所有文件或者文件夹的名称
File[] listFiles():返回的是某个目录下所有的文件或者文件夹的对象
String[] list(FilenameFilter filter):返回某个目录下的所有未被过滤掉的文件或者文件夹的名称
File[] listFiles(FilenameFilter filter):返回的是某个目录下所有未被过滤掉的文件或者文件夹的对象
使用哪个类,以及构造进程的一般原则是:
1.首先考虑原始的数据格式是什么?
a.二进制格式(只要不能确定是纯文本的) InputStream, OutputStream及其所有带Stream结束的子类
b.纯文本格式(含纯英文与汉字或其他编码方式);Reader, Writer及其子类
2.考虑是输入还是输出?
a.输入:Reader, InputStream类型的子类
b.输出:Writer, OutputStream类型的子类
3.是否需要通过中介?
a.从Stream到Reader,Writer的转换类:InputStreamReader, OutputStreamWriter
b.低级流到高级流的转换
4.数据的来源或者去向是什么?
a.是文件: FileInputStream, FileOutputStream, FileReader, FileWriter
b.是byte[]:ByteArrayInputStream, ByteArrayOutputStream
c.是Char[] CharArrayReader, CharArrayWriter
d.是String StringBufferInputStream, StringReader, StringWriter
e.网络数据流:InputStream, OutputStream, Reader, Writer
5.是否要缓冲?
a.若需要就是四种缓冲类:BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter
相关文章推荐
- 黑马程序员——Java基础---IO流(一)
- 黑马程序员——Java基础---IO流概述、字符流、字节流、流操作规律
- 黑马程序员--java基础--IO流(一)字符流
- 黑马程序员——JAVA基础----IO流(一)
- 黑马程序员——Java基础---IO(一)---IO流概述、字符流
- 黑马程序员_Java基础_IO流(二)_19
- 黑马程序员——java基础---IO流(第20天)
- 黑马程序员---Java基础总结--IO流
- 黑马程序员--java 基础之IO流 其他IO类 --08
- 黑马程序员——java基础IO流、访问src资源配置文件
- 黑马程序员__java基础__IO流(File流、其它流)
- 黑马程序员——【Java基础】——Java IO流
- 黑马程序员——Java基础--------IO流(二)
- 黑马程序员——Java基础——IO流笔记(BufferedWriter使用示例)
- 黑马程序员——java基础(IO流)
- 黑马程序员——Java基础——IO流(FileWriter)
- 黑马程序员-->Java基础-->IO流
- 黑马程序员——JAVA基础------IO流(四)----字节字符转换流和缓冲流
- 黑马程序员——JAVA基础——IO流
- 黑马程序员__JAVA基础__IO流(一)