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

黑马程序员——Java基础---IO流(字符流)

2015-06-09 21:32 567 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

IO(Input Output)流

l IO流用来处理设备之间的数据传输

l Java对数据的操作是通过流的方式

l Java用于操作流的对象都在IO包中

l 流按操作数据分为两种:字节流与字符流 。

l 流按流向分为:输入流,输出流。

IO流常用基类

字节流的抽象基类:

InputStream ,OutputStream。

字符流的抽象基类:

Reader,Writer。

注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。

如:InputStream的子类FileInputStream。

如:Reader的子类FileReader。

代码示例:

/*
字符流和字节流:
字节流两个基类:
InputStream OutputStream

字符流两个基类:
Reader Writer

先学习一下字符流的特点。
既然IO流是用于操作数据的,
那么数据的最常见体现形式是:文件。
那么先以操作文件为主来演示。
需求:在硬盘上,创建一个文件并写入一些文字数据。
找到一个专门用于操作文件的Writer子类对象。
FileWriter。 后缀名是父类名,前缀名是流对象的功能。
*/
import java.io.*;
class FileWriterDemo
{
public static void main(String[] args) throws IOException
{
//创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。
//而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。
FileWriter fw = new FileWriter("D:\\domo.txt");
//调用write方法,将字符串写入到流中。
fw.write("abcde");
//刷新流对象中的缓冲区中的数据。将数据刷到目的地中。
//fw.flush();
//关闭流资源,但是关闭之前会刷新一次内部的缓冲区中的数据。将数据刷到目的地中。
//和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。
fw.close();
}
}

IO程序的书写

1,导入IO包中的类

2,进行IO异常处理

3,在finally中对流进行关闭

字符流——创建文件

1,创建流对象,建立数据存放文件

FileWriter fw = new FileWriter(“Test.txt”);

2,调用流对象的写入方法,将数据写入流

fw.write(“text”);

3,关闭流资源,并将流中的数据清空到文件中。

fw.close();

完整代码:

FileWriter fw = null;

try{

fw = new FileWriter("Test.txt");

fw.write("text");

}

catch (IOException e){

System.out.println(e.toString());

}

finally{

If(fw!=null)

try{

fw.close();

}

catch (IOException e){

System.out.println(e.toString());

}

}

代码示例:

/*
IO异常的处理方式。
*/
import java.io.*;
class FileWriterDemo2
{
public static void main(String[] args)
{
FileWriter fw = null;
try
{
fw= new FileWriter("D:\\domo.txt");
fw.write("abcdefg");
}
catch(IOException e)
{
System.out.println("catch:"+e.toString());
}
finally
{
try
{
if(fw!=null)
fw.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
}
}对已有文件续写代码示例:
/*
演示对已有文件的数据续写。
*/
import java.io.*;
class FileWriterDemo3
{
public static void main(String[] args)
{
FileWriter fw = null;
try
{
fw= new FileWriter("D:\\domo.txt",true);
fw.write("\r\nnihao");
}
catch(Exception e)
{
System.out.println(e.toString());
}
finally
{
try
{
if(fw!=null)
fw.close();
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
}
}

字符流——读取文件

1,建立一个流对象,将已存在的一个文件加载进 流。

FileReader fr = new FileReader(“Test.txt”);

2,创建一个临时存放数据的数组。

char[] ch = new char[1024];

3,调用流对象的读取方法将流中的数据读入到数组 中。

fr.read(ch);

完整代码:

FileReader fr = null;

try{

fr = new FileReader("c:\\test.txt");

char[] buf = new char[1024];

int len= 0;

while((len=fr.read(buf))!=-1){

System.out.println(new String(buf,0,len));

}

}

catch (IOException e){

System.out.println("read-Exception :"+e.toString());

}

finally{

if(fr!=null){

try{

fr.close();

}

catch (IOException e){

System.out.println("close-Exception :"+e.toString());

}

}

读取文件第一种方式代码示例:

import java.io.*;
class FileReaderDemo
{
public static void main(String[] args)
{
FileReader fr = null;
try
{
//创建一个文件读取流对象,和指定名称的文件相关联。
//要保证该文件是已经存在的,如果不存在会发生异常FileNoFoundException
fr = new FileReader("D:\\demo.txt");
//调用读取流对象的read方法。
//read();一次读一个字符,而且会自动往下读。
int ch=0;
while((ch=fr.read())!=-1)
{
System.out.println((char)ch);
}
}
catch(Exception e)
{
System.out.println(e.toString());
}
finally
{
try
{
if(fr!=null)
fr.close();
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
}
}读取文件第二种方式代码示例:
/*
第二种方式:通过字符数组进行读取。
*/
import java.io.*;
class FileReaderDemo2
{
public static void main(String[] args)
{
FileReader fr = null;
try
{
//定义一个字符数组。用于存储读到字符。
//该read(char[])返回的是读到字符个数。
fr = new FileReader("D:\\demo.txt");
char[] buf = new char[1024];
int num = 0;
while((num=fr.read(buf))!=-1)
{
System.out.println(new String(buf,0,num));
}
}
catch(Exception e)
{
System.out.println(e.toString());
}
finally
{
try
{
if(fr!=null)
fr.close();
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
}
}

字符流的缓冲区

缓冲区的出现提高了对数据的读写效率。

对应类

BufferedWriter

BufferedReader

缓冲区要结合流才可以使用。

在流的基础上对流的功能进行了增强。

字符流缓冲区写入流代码示例:

/*
缓冲区的出现是为了提高流的操作效率而出现的。
所以在创建缓冲区之前,必须要先有流对象。
该缓冲区中提供了一个跨平台的换行符。
newLine();
*/
import java.io.*;
class BufferedWriterDemo
{
public static void main(String[] args)
{
FileWriter fw = null;
BufferedWriter bufw = null;
try
{
//创建一个字符写入流对象。
fw = new FileWriter("D:\\buf.txt");
//为了提高字符写入流效率。加入了缓冲技术。
//只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。
bufw = new BufferedWriter(fw);
for(int i=1;i<5;i++)
{
bufw.write("abcd"+i);
bufw.newLine();
bufw.flush();
}
}
catch(Exception e)
{
System.out.println(e.toString());
}
finally
{
try
{
if(bufw!=null)
//其实关闭缓冲区,就是在关闭缓冲去中的流对象。
bufw.close();
}
catch(Exception e)
{
System.out.println(e.
9ff6
toString());
}
}
}
}字符流缓冲区读取流代码示例:
/*
字符读取流缓冲区:
该缓冲区提供了一个一次读一行的方法 readLine();方便于对文本数据的获取。
当返回null时,表示读到文件末尾。

readLine方法返回的时候只返回回车符之前的数据内容,并不返回回车符。
*/
import java.io.*;
class BufferedReaderDemo
{
public static void main(String[] args)
{
BufferedReader bufr =null;
FileReader fr =null;
try
{
//创建一个读取字符流对象和文件相关联。
fr = new FileReader("D:\\buf.txt");
//为了提高效率,加入缓冲技术。
//将字符读取流对象作为参数传递给缓冲对象的构造函数。
bufr = new BufferedReader(fr);
String line = null;
while((line=bufr.readLine())!=null)
{
System.out.println(line);
}
}
catch(Exception e)
{
System.out.println(e.toString());
}
finally
{
try
{
if(bufr!=null)
bufr.close();
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
}
}总结
字符流是在对字符的操作,所以要了解操作时的一些方法,而且最重要的要对异常有标准处理。缓冲区的出现是为了提高流操作的效率。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: