您的位置:首页 > 职场人生

黑马程序员—IO流

2013-04-26 11:00 302 查看
-------
android培训、java培训、期待与您交流! ----------
输入输出(IO)流:
1.IO流是用来处理设备之间的数据传输的,操作流的对象都在IO包中;
2.流分为两种:
字节流------表示以字节为单位从stream中读取或往stream中写入信息,即io包中的inputstream类和outputstream类的派生类。通常用来读取二进制数据,如图象和声音。

字符流--------以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。

1). 字符流
        在程序中一个字符等于两个字节,Java为我们提供了Reader和Writer两个专门操作字符流的类
                                 字符输出流:Writer
                                             Writer是一个字符流,它是一个抽象类,所以要使用它,也必须通过其子类来实例化它后才能使用它。

                                             Writer类的常用方法

                                             方法名称

                                             描述

                                             public abstract void close() throws IOException

                                             关闭输出流

                                             public void write(String str) throws IOException

                                             将字符串输出

                                             public void write(char cbuf) throws IOException

                                            将字符数组输出

                                            public abstract void flush() throws IOException

                                            强制性清空缓存

                                            示例:  向一个文本文件中通过字符输出流写入数据

                                                     public static void main(String[] args) throws Exception {

                                                               // 声明一个File对象

                                                               File file = new File("hellowolrd.txt");

// 声明一个Write对象 

Writer writer = null;
// 通过FileWriter类来实例化Writer类的对象并以追加的形式写入
writer = new FileWriter(file, true);
// 声明一个要写入的字符串
String str = "字符串形式写入Helloworld";
// 写入文本文件中
writer.write(str);
// 刷新
writer.flush();
// 关闭字符输出流
writer.close();
}

   字符输入流:Reader
Reader本身也是一个抽象类,同样,如果使用它,我们需要通过其子类来实例化它才可以使用它。
Reader类的常用方法
方法名称
描述
public abstract void close() throws IOException
public int read() throws IOException
public int read(char cbuf) throws IOException
通过方法我们看到Reader类只提供了一个读入字符的方法
示例:在上面的基础上把文本中的内容读出来,并且显示在控制台上

public static void main(String[] args) throws Exception {

// 声明一个File对象
File file = new File("hellowolrd.txt");
// 声明一个Reader类的对象
Reader reader = null;
// 通过FileReader子类来实例化Reader对象
reader = new FileReader(file);
// 声明一个字符数组
char[] c = new char[1024];
// 将内容输出
// int len = reader.read(c);
//循环方式一个一个读
int len=0;
int temp=0;
while((temp=reader.read())!=-1){
c[len]=(char)temp;
len++;
}
// 关闭输入流
reader.close();
// 把char数组转换成字符串输出
System.out.println(new String(c, 0, len));


2). 字符流与字节流的区别
操作字节流操作时本身不会用到缓冲区,是文件本身直接操作,而字符流在操作时就使用到了缓冲区。

3).

3.流的层次结构

定义:

(1) java将读取数据对象成为输入流,能向其写入的对象叫输出流。结构图如下:输入流:



输出流
4000



InputStream类

inputstream类和outputstream类都为抽象类,不能创建对象,可以通过子类来实例化。

InputStream是输入字节数据用的类,所以InputStream类提供了3种重载的read方法.Inputstream类中的常用方法:

(1) public abstract int read( ):读取一个byte的数据,返回值是高位补0的int类型值。

(2) public int read(byte b[ ]):读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的

(3) public int read(byte b[ ], int off, int len):从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。

(4) public int available( ):返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起,如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用,

(5) public long skip(long n):忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取

(6) public int close( ) :我们在使用完后,必须对我们打开的流进行关闭.

OutputStream类

OutputStream提供了3个write方法来做数据的输出,这个是和InputStream是相对应的。

1. public void write(byte b[ ]):将参数b中的字节写到输出流。

2. public void write(byte b[ ], int off, int len) :将参数b的从偏移量off开始的len个字节写到输出流。

3. public abstract void write(int b) :先将int转换为byte类型,把低字节写入到输出流中。

4. public void flush( ) : 将数据缓冲区中数据全部输出,并清空缓冲区。

5. public void close( ) : 关闭输出流并释放与流相关的系统资源。

注意:

1. 上述各方法都有可能引起异常。

2. InputStream和OutputStream都是抽象类,不能创建这种类型的对象。 

FileInputStream类

FileInputStream类是InputStream类的子类,用来处理以文件作为数据输入源的数据流。使用方法:

方式1:

File fin=new File("d:/abc.txt");

FileInputStream in=new FileInputStream(fin);

方式2:

FileInputStream in=new

FileInputStream("d: /abc.txt");

方式3:

构造函数将 FileDescriptor()对象作为其参数。

FileDescriptor() fd=new FileDescriptor();

FileInputStream f2=new FileInputStream(fd);

FileOutputStream类

FileOutputStream类用来处理以文件作为数据输出目的数据流;一个表示文件名的字符串,也可以是File或FileDescriptor对象。

创建一个文件流对象有两种方法:

方式1:

File f=new File("d:/abc.txt");

FileOutputStream out=new FileOutputStream (f);

方式2:

FileOutputStream out=new

FileOutputStream("d:/abc.txt");

方式3:构造函数将 FileDescriptor()对象作为其参数。

FileDescriptor() fd=new FileDescriptor();

FileOutputStream f2=new FileOutputStream(fd);

方式4:构造函数将文件名作为其第一参数,将布尔值作为第二参数。

FileOutputStream f=new FileOutputStream("d:/abc.txt",true);

注意:

(1)文件中写数据时,若文件已经存在,则覆盖存在的文件;(2)的读/写操作结束时,应调用close方法关闭流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: