欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

黑马程序员_IO1,黑马_io1

来源: javaer 分享于  点击 2397 次 点评:62

黑马程序员_IO1,黑马_io1


----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

IO流有很多种,操照数据的不同,可以分为字节流和字符流,按照数据传输方向的不同有又
可以分为输入流和输出流,程序从输入流中读取数据,向输出流中写入数据。
在IO包中,字节流的输入输出流分别用java.io .InputStream和java.io.OutputStream
表示,字符流的输入输出流分别用java.io.Reader和java.io.Writer.
InputStream常用方法:
int read():从输入流读取一个8位的字节,把它转换为0--255之间的整数,并返回这一个整数
int read(byte[] b):从输入流读取若干个字节,把它们保存到参数b指定的字节数组中,返回的
       整数表示读取字节数。
int read(byte[] b,int off,int len):
  从输入流读取若干个字节,把它们保存到参数b指定的字节数组中,off指定字节数
  组开始保存数据的其实下标,len表示读取的字节数目。
void close():关闭此输入流并释放与该流关联的所有系统资源。

outputStream的常用方法:
void write(int b):向输出流写入一个字节。
void write(byte[] b):把参数b指定的字节数组的所有字节写到输出流中
void write(byte[] b,int off,int len): 将指定byte数组中从偏移量off开始的len个字节写入输出流
void flush():刷新此输出流并强制写出所有缓冲的输出字节。
void close():关闭次输出流并释放与此流相关的所有系统资源。
字节流读写操作:
针对文件的读写,JDK专门提供了两个类,分别是:FileInput和FileOutputStream
FileInputStream是InputStream的子类,它是操作文件的字节输入流,专门用于读取文件中的数据
。由于从文件读取数据是重复的操作,因此需要通过循环语句来实现数据的持续读取。
下面是一个案例来介绍字节流对文件数据的读取。

<span >import java.io.*;
public static void main(String[] args){
 FileInputStream in=new FileInputStream("test.txt");
 int b=0;
 while(true){
 b=in.read();//变量b记住读取的一个字节。
 if(b==-1){
 break;
 }
 System.out.println(b);//否则将b写出;
 }
 in.close();
 }
}
</span>


文件的拷贝
在应用程序中,IO流通常都是成对出现的,即输入流和输出流一起使用。例如文件的拷贝就需要通过
输入流来读取文件中的数据,通过输出流将数据写入文件。
下面是一个案例:

<span >import java.io.*;
public class Example04
public static void main(){
 //创建一个字节输入流,用于读取当前目录下source文件夹中的MP3文件
 InputStream in=new FileInputStream(“source\listen.mp3”);
 //创建一个文件字节输出流,用于将读取的数据写入sarget目录下的文件中
 OutputStream out=new FileOutputStream(“source\listen.mp3”);
 int len;
 long begintime=System.currentTimeMilllis();//获取拷贝文件前的系统时间
 while((len=in.read())!=-1)){
 out.write(len);
 }
 long endtime=System.currentTimeMillis();
 System.out.printn("拷贝文件所消耗的时间是:"+(endtime-begintime)+"毫秒");
 in.close();
 out.close();

}

</span>


字节缓冲流:
在IO包中提供了两个带缓冲的字节流,分别是BufferedInputSteam和BufferedOutStream
这两个流都使用了装饰设计模式。
它们的构造方法中分别接收InputStream和OutputStream类型的参数作为被包装对象。

<span >import java.io.*;
public class{
public static void main(){
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("src.txt"));
int len;
while((len=bis.read())!=-1){
 bos.write(len);
}

bis.close();
bos.close();
}

</span>


}
字符流
JDK提供了字符流,同字节流一样,字符流也有两个抽象的顶级父类,分别是Reader和Writer。
其中Reader是字符输入流,用于从某个源设备读取字符,Writer是字符输出流,用于向某个目标设备
写入字符。
Reader和Writer作为字符流的顶级父类,也有许多子类,接下来通过集成关系图来列出Reader
和Writer的一些常用子类。
Java程序在编译或者运行期间经常会出现一些错误,在错误中通常会报告出错的行号
为了方便查询错误,需要在代码中加入行号。
JDK提供了一个可以跟踪行号的输入流--LineNumberReader,它是BufferReader的直接子类
下满为实例:

<span >import java.io.*;
pubic class Example{
 public static void main(String[] args){
 FileReader fr=new FileReader("Example.java");
 FileWriter fw=new FileWriter("copy.java");
 LineNumberReader it=new LineNumberReader(fr);
 fr.setLineNumber(); 
 String line=null;
 while((line=lr.readLine())!=null){
 fw.writer(lr.getLineNumber()+";"+line);
 fw.write("\r\n");
     }
 }
}
</span>


转换流
有时候字节流和字符流之间是需要转换的。
在JDK中提供了两个类可以将字节流转换为字符流,他们反别是:InputStreamReader和
OutputStreamWriter。
转换流也是一种字节流,其中OutputStreamWriter是Writer的子类,他可以将一个
字节输出流包装成字符输出流,方便直接写入字符,而InputStreamReader是Reader的子类,它可以
将一个字节输入流包装成字符输入流,方便直接读取字符。

LineNumberReader
Java程序在编译或运行期间经常回出现一些错误,在错误中通常会报告出错的行号,为了方便查找错误,需要
在代码中加入行号。JDK提供了一个可以跟踪行号的输入流--LineNumberReader,它是BufferReader
的直接子类。

 

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

 

相关文章

    暂无相关文章
相关栏目:

用户点评