您的位置:首页 > Web前端

IO流---字符流(FileWriter, FileReader ,BufferedWriter,BufferedReader)

2016-09-28 23:22 555 查看
IO Input Output

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

java对数据的操作是通过流来实现的。

流按流向分:输入流,输出流 是相对内存而言的。把硬盘的数据读取到内存中就是输入流。

输入流就是读操作,输出流就是写操作。

流按操作数据分两种:字节流,字符流

字节流对象可以处理所有的数据。

字符流的由来: 字节流读取字节数据后,不直接操作,而是先查指定的编码表,获取对应的文字。在对这个文字进行操作,简单的说就是 字节流+编码表

IO流的四个顶层基类

  字节流的两个顶层父类(抽象基类):

    InputStream

    OutputStream

  字符流的两个顶层父类(抽象基类)

    Reader

    Writer

文件拷贝

方法一:

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

//1,读取一个已有的文本文件,使用字符读取流和文件相关联。
FileReader fr = new FileReader("IO流_2.txt");
//2,创建一个目的,用于存储读到数据。
FileWriter fw = new FileWriter("copytext_1.txt");
//3,频繁的读写操作。
int ch = 0;
while((ch=fr.read())!=-1){
fw.write(ch);
}
//4,关闭流资源。

fw.close();
fr.close();
}


  

方法二:

private static final int BUFFER_SIZE = 1024;

/**
* @param args
*/
public static void main(String[] args) {

FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader("IO流_2.txt");
fw = new FileWriter("copytest_2.txt");

//创建一个临时容器,用于缓存读取到的字符。
char[] buf = new char[BUFFER_SIZE];//这就是缓冲区。

//定义一个变量记录读取到的字符数,(其实就是往数组里装的字符个数 )
int len = 0;

while((len=fr.read(buf))!=-1){
fw.write(buf, 0, len);
}

} catch (Exception e) {
//			System.out.println("读写失败");
throw new RuntimeException("读写失败");
}finally{
if(fw!=null)
try {
fw.close();
} catch (IOException e) {

e.printStackTrace();
}
if(fr!=null)
try {
fr.close();
} catch (IOException e) {

e.printStackTrace();
}
}
}


  

字符流的缓冲区:提高了对数据的读写效率,缓冲区要结合流才可以使用,在流的基础上对流的功能进行了增强。

对应的类是:前缀对应功能,后缀对应所属的体系

BufferedWriter

BufferedReader

FileWriter fw = new FileWriter("buf.txt");
//为了提高写入的效率。使用了字符流的缓冲区。
//创建了一个字符写入流的缓冲区对象,并和指定要被缓冲的流对象相关联
BufferedWriter bufw = new BufferedWriter(fw);

bufw.write("xixiixii");

//使用缓冲区的刷新方法将数据刷目的地中。
bufw.flush();

//关闭缓冲区。其实关闭的就是被缓冲的流对象fw。
bufw.close();

关之前会刷一次,但是最好手动调用一下,关目的是关闭资源。

BufferedWriter提供了换行的方法 newLine()

BufferedReader :


FileReader fr = new FileReader("buf.txt");

BufferedReader bufr = new BufferedReader(fr);

String line = null;

while((line=bufr.readLine())!=null){
System.out.println(line);
}

bufr.close();


  

之前的读方法:

public static void demo() throws FileNotFoundException, IOException {
FileReader fr = new FileReader("buf.txt");

char[] buf = new char[1024];

int len = 0;
while((len=fr.read(buf))!=-1){
System.out.println(new String(buf,0,len));
}

fr.close();
}


  

BufferedWriter

newLine方法

BufferedReader

   readLine方法

文本拷贝方式三:使用缓存区

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

FileReader fr = new FileReader("buf.txt");
BufferedReader bufr = new BufferedReader(fr);

FileWriter fw = new FileWriter("buf_copy.txt");
BufferedWriter bufw = new BufferedWriter(fw);

String line = null;
while((line=bufr.readLine())!=null){
bufw.write(line);
bufw.newLine();
bufw.flush();
}

bufw.close();
bufr.close();


装饰设计模式:

  对一组对象的功能进行增强时,就可以使用该模式来解决问题。

BufferedReader有个子类LineNumberReader,可以获取行号
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐