最近打算开发一个小脚本,此脚本的功能需求需要用到javaIO流的部分,这个方面一直掌握的不是很好,所有就认真饿学习了一下,以下是学习心得,请指教!!
java的IO流部分主要分为两大类,一类是输入,另一类就是输出了!所以最基本输入输出类就是InputStream和OutputSream。InputSream调用read()方法实现数据的读入。当然这里是一程序为中心。站在程序这一方看IO流的
的工作方式。那么OutputStream调用write()方法实现数据输出。其他的功能类都是从这个基本的类派生出来的。也就是继承了这两个基本类。
那什么是流呢?
在理解流之前,我们先要理解“数据源”。数据源,对于对于输入流而言,就是获得数据的、产生数据的地方。对于输出流而言,就是将数据输出到什么地方。那么不难理解了,数据源就是存放数据的地方了。在计算里,我们可以存放数据的地方,首先就是file文件了。这是最主要的存放数据的地方了。其实就是内存。在内存中存放的数据可以是String字符串的类型,也可以是数组类型。这些就是数据源。我们可以从这些地方读取数据,也可以从这些地方存放数据。最大的数据源应该网络数据源了。我现在工作的公司就是在网上获得数据的。
那什么是流呢?我的理解就是程序和数据源之间通信的工具类叫做流。他封装了底层物理器件的工作过程。使我们很方便的调用这些类,就实现了数据的转移。而这些数据就像水流一样,通过这些工具类搭建的管道流到目的地。
在传输过程中数据都是以01的形式存在,并没有什么区别。但是当我们打算传输时或者解析接收到得数据时,我们会怎样的形式解析呢!最基本要分为两种方式。一个就是按字节的方式解析,另一种就是按字符的方式解析。
综上所述,根绝输入和输出的不同,以及解析时按字节和字符的要求等。我们将IO流功能类以下表的形式表示
字节 | 字符 |
InputStream | Reader |
OutputStream | Writer |
FileInputStream | FileReader |
FileOutputStream | FileWriter |
StringBufferedInputStream | StringReader |
StringWriter | |
ByteArrayInputStream | CharArrayReader |
ByteArrayOutputStream | CharArrayWriter |
根据源的不同和字节与字符的不同分别定义了这些工具了。到底使用什么类根据需求而定。
一、 File流工具类的使用:
1、文件流工具类FileInputStream、FileOutputStream、FileReader和FileWriter类。
这些类都通过构造方法指向固定的文件。read()和write() 方法可以将数据读取(写入)文件。这个数据可以是字符(字节)或者是字符数组(字节数组)。
BufferedReader in=new BufferedReader(new InputStreamReader(new FileInputStream("./sxd/form/filrtest.txt")));
也可以定义成:
BufferedReader in=new BufferedReader(new FileReader("("./sxd/form/filrtest.txt"));
String s; //用于接收字符数据
while((s=in.readline())!=null){
System.out.println(s);
}
读取文件来说用字节和字符方式并没有什么区别明显的区别。主要的区别是他们提供的方法,你更喜欢用那个。在字节
转换成字符时需要在外面包装方法InputStreamReader和OutputStreamWriter两个类作为字符和字节之间的桥梁。
二、内存中的数据的读取和写入:
这方面得流工具类,我用的比较少。
String str=new String("this is test String")
StringReader in=new StirngReader(s);
int c;// StringReader类的read()方法每次返回的是一个Int类型的值
while((c=in.read())){
System.out.println((char)c);
}
三 、包装器类的使用:
根据字节和字符的区别包装器类也分为两类,详情请看下表:
字节 | 字符 |
FilterInputStream | FilterReader |
FilterOutputStream | FilterWriter |
BufferedInputStream | BufferedReader |
BufferedOutputStream | BufferedWriter |
DataInputStream | LineNumberReader |
PrintStream | PrintWriter |
这些就是常用的包装类,其中FileterInputStream、FilterOutputStream、FilterReader和FilterWriter为
抽象类。起作用是起到装饰器类和工具流之间的接口作用。为什么这些装饰器类可以包装工具类关键就在这些接口类。
这里重点介绍一下PrintWriter类。
PrintWriter是文本文件的快捷方式。他内部定义缓存机制。可以直接使用这个类将数据输入到指定的文件中。
String str="this is worldof developer";
PintWriter out =new PrintWriter("./com/form/eric.txt");
out.println(s);