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

黑马程序员——基础知识--IO流

2015-10-20 18:03 381 查看
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------

计算机最重要的功能是处理数据。一个有用的计算机语言需要拥有良好的IO功能,以便让未处理的数据流入程序,让已处理的数据流出。

与其他语言相比,Java的IO功能显得复杂。在其他语言中,许多IO功能(比如读取文件),是被封装好的,可以用一两行程序实现。在Java中,程序员往往需要多个层次的装饰(decoration),才能实现文件读取。

相对的复杂性带来的好处是IO的灵活性。在Java中,程序员可以控制IO的整个流程,从而设计出最好的IO方式。我们将在下文看到更多。

 


IO示例

 下面是我用于演示的文件file.txt

Hello World!
Hello Nerd!


 

我们先来研究一个文件读取的例子:

import java.io.*;

public class Test
{
public static void main(String[] args)
{
try {
           BufferedReader br =
              new BufferedReader(new FileReader("file.txt")); 

String line = br.readLine();

while (line != null) {
System.out.println(line);
line = br.readLine();
}
            br.close();
}
catch(IOException e) {
System.out.println("IO Problem");
}
}
}


这段程序中包含一个try...catch...finally的异常处理器。可参考Java进阶02
异常处理

 


装饰器与功能组合

程序IO的关键在于创建BufferedReader对象br:

    BufferedReader br = new BufferedReader(new FileReader("file.txt"));

在创建的过程中,我们先建立了一个FileReader对象,这个对象的功能是从文件"file.txt"中读取字节(byte)流,并转换为文本流。在Java中,标准的文本编码方式为unicode。BufferedReader()接收该FileReader对象,并拓展FileReader的功能,新建出一个BufferedReader对象。该对象除了有上述的文件读取和转换的功能外,还提供了缓存读取(buffered)的功能。最后,我们通过对br对象调用readLine()方法,可以逐行的读取文件。

(缓存读取是在内存中开辟一片区域作为缓存,该区域存放FileReader读出的文本流。当该缓存的内容被读走后(比如readLine()命令),缓存会加载后续的文本流。)

BufferedReader()是一个装饰器(decorator),它接收一个原始的对象,并返回一个经过装饰的、功能更复杂的对象。修饰器的好处是,它可以用于修饰不同的对象。我们这里被修饰的是从文件中读取的文本流。其他的文本流,比如标准输入,网络传输的流等等,都可以被BufferedReader()修饰,从而实现缓存读取。


写入

写入(write)操作与读取操作相似。我们可以通过使用装饰,实现复杂的写入功能。这里是一个简单的写入文本的例子:

import java.io.*;

public class Test
{
public static void main(String[] args)
{
try {
String content = "Thank you for your fish.";

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

// create the file if doesn't exists
if (!file.exists()) {
file.createNewFile();
}

FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(content);
bw.close();

}
catch(IOException e) {
System.out.println("IO Problem");
}
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: