Java有一个庞大的I/O系统文件处理只不过是这个系统的一个子系统文件的I/O系统整体上说都是这样的方式数据是在程序和文件之间传递的程序指程序里的存数据的变量或常量文件指一个File对象以从文件读字节为例就是首先提供一个连通二者(程序和文件)的管道管道只是个隐喻专业术语叫做流程序与管道的连通是浑然天成的因为管道对象一定是在特定的程序里生成的这个对象可以很自然的使用程序里的变量或常量而文件和管道的连通是需要特别指定的连通哪个文件一般是由File对象或一个字符串确定的
这个管道很神奇在它上面可以施加各种魔法(就是能完成某种功能的方法)能施加什么样的魔法取决于管道的特性管道的种类很多但是分类很清晰只有两大类基础管道和功能管道对应到Java术语里就是节点流和处理流基础管道是根基提供了少量且重要的操作功能管道是锦上添花的提供了更多的方法提高了开发效率而且一个基础管道可以套上好几层功能管道对于每一个功能管道来说它只能套在确定类型的基础管道上其实这个道理很容易明白看看API里对这些流类的命名就能看出来功能管道和基础管道是有对应关系的对于文件操作来说基础管道有四种分别是FileInputStreamFileOutputStreamFileWriterFileReader一个基础管道的名字包含了个方面的内容以FileInputStream为例File说明了交换数据的一端是文件因为另一端一定是程序了所以不需要指定Input说明了数据的流向是流向程序的Stream说明了交换的数据基本单位是字节就是说把数据流当做字节流同样可以分析出FileWriter的作用这个名字有File和Writer组成貌似只能说明两方面的内容但是Writer包含了写出字符的意思也就是说数据流向是程序>文件交换数据的基本单位是字符把数据流当做字符流
我们考虑一个简单的程序把草帽海贼团成员的名字输入到一个文件strawtxt里考虑下大致的流程首先把名字存到一个字符串数组里把该数组的内容输入到strawtxt里也就是确定了数据流向程序>文件又因为传的内容是字符串为了简单选用FileWriter作为基础管道接下来考虑选什么作为功能管道因为要把字符串写到文件里查阅API后选取PrintWriter比较合适因为这个类提供了println()很适合把字符串输出到文件中输出完成后不要忘了关闭流也就是关闭管道打开一个资源就要记得关闭这个资源这是一个好的编程习惯代码如下
代码
import javaio*;
public class FileDemo{
public static void main(String[] args) throws Exception{
String names[]={LuffyNamiZoroSanjiChopperUssopRobinBrookFranky};
FileWriter fw=new FileWriter(strawtxt);
PrintWriter pw=new PrintWriter(fw);
for(int i=;i<nameslength;i++){
pwprintln(names[i]);
}
pwflush();
pwclose();
}
}
关于代码说明一点在main()里抛出异常只是为了代码写起来简单但是这种方式不好把异常处理机制当成了摆设没有让该机制起到编写强壮代码的作用java的IO操作中有很多都会抛出异常所以这类代码写起来会有大量的trycatchfinally语句块出现文件IO操作的原理不难但是用的怎么样取决于对API的理解基础管道的选取是根据题目需要的而功能管道的选取体现了你对API的掌握程度若选取的功能管道不同实现同样的操作复杂度就会有区别