<<<I、O概述及字符流基本操作>>>
来源:互联网 发布:上海绿茶网络vip 编辑:程序博客网 时间:2024/06/06 21:05
一、概述 :
Java中对文件的操作是以流的方式进行的。流是Java内存中的一组有序数据序列。Java将数据从源(文件、内存、键盘、网络)读入到内存中形成流,然后将这些流还可以写到另外的目的地(文件、内存、控制台、网络),之所以称为流,是因为这个数据序列在不同时刻所操作的是源的不同分.
二、流的分类 :
Java对流的分类比较丰富,刚接触的人看了后会感觉很晕。流分类的方式很多:
1、 按照输入的方向分, (已内存而言) 从外设将数组输入流和输出流,输入输出的参照对象是Java程序.
2、按照处理数据的单位不同分,字节流和字符流,字节流读取的最小单位是一个字节(1byte=8bit),而字符流一次可以读取一个字符(1char = 16bit).
3、按照功能的不同分,分节点流和处理流,节点流是直接从一个源读写数据的流(这个流没有经过包装和修饰),处理流是在对节点流封装的基础上的一种流,FileInputStream是一个接点流,可以直接从文件读取数据,但是BufferedInputStream可以包装 FileInputStream,使得其有缓冲功能.
4、其实还有一些流 :比如:对象流、缓冲流、压缩流、文件流等等!其实都是节点流和处理流的子分类,当然你也可以创建新的流类型,只要你需要.
三、I、O流的关系 :
不管流的分类是多么的丰富和复杂,其根源来自于四个基本的类。这个四个类的关系如下:
字节流 输入流 InputStream 输出流 OutputStream
字符流 输入流 Reader 输出流 Writer !!!
字符流的由来:就是字节流读取文字字节数据后,不直接操作而是先查指定的编码表,获取对应的文字,在对这个文字进行操作.简单说:字节流+编码表!!
I、O流的特点 : 这些体系的子类都以父类名作为后缀,而且子类名的前缀就是该对象的功能!!!
四、流的细节 :
创建一个可以往文件中写入字符数据的字符输出流对象,既然是在一个文件中写入文字数据,那么在创建对象时,就必须明确该文件.
FileWriter构造函数中有一个是指定要写入数据的文件,比如FileWriter("Demo.txt"),如果文件不存在,则会自动创建.如果文件存在,则会被覆盖..
如果需要在指定的文件进行续写,可以在构造函数中加入true,可以实现对文件进行续写!FileWriter("Demo.txt",true),
**** 其实数据是写入到临时存储缓冲区中,要想使数据写到文件中,需要刷新"flush()该方法是将数据写到目的地中"!!!
**** 我们在操作I、O流时,会自动调用Windows底层资源,所以我们在操作流之后要关闭资源."close();该方法在关闭资源前会先调用flush()"
创建读取字符数据的流对象,在创建读取流对象时,必须要明确被读取的文件,一定要确定该文件是存在的,用一个读取流关联一个已存在文件.
比如 : FileReader("demo.txt"); 构造函数中可以指定一个文件来读取.
***** 注意一下: 字符流在读取文件数据时是依据 "-1"的出现来判断读取到结尾..
五、代码演示:
创建一个可以往文件中写入字符数据的字符输出流对象
public static void main(String[] args) throws IOException {//创建一个可以往文件中写入字符数据的字符输出流对象。/* * 既然是往一个文件中写入文字数据,那么在创建对象时,就必须明确该文件(用于存储数据的目的地)。 * * 如果文件不存在,则会自动创建。 * 如果文件存在,则会被覆盖。 * * 如果构造函数中加入true,可以实现对文件进行续写! */FileWriter fw = new FileWriter("demo.txt",true);/* * 调用Writer对象中的write(string)方法,写入数据。 * * 其实数据写入到临时存储缓冲区中。 * */fw.write("abcde"+LINE_SEPARATOR+"hahaha");/* * 进行刷新,将数据直接写到目的地中。 */fw.flush();/* * 关闭流,关闭资源。在关闭前会先调用flush刷新缓冲中的数据到目的地。 */fw.close();}
读取一个文本文件。将读取到的字符打印到控制台.
public static void main(String[] args) throws IOException {FileReader fr = new FileReader("demo.txt");/* * 使用read(char[])读取文本文件数据。 * 先创建字符数组。 */char[] buf = new char[1024];int len = 0;while((len=fr.read(buf))!=-1){System.out.println(new String(buf,0,len));}fr.close();}
读取一个文本文件。将读取到的字符打印到控制台.
public static void main(String[] args) throws IOException {//1,创建读取字符数据的流对象。/* * 在创建读取流对象时,必须要明确被读取的文件。一定要确定该文件是存在的。 * 用一个读取流关联一个已存在文件。 */FileReader fr = new FileReader("demo.txt");int ch = 0;while((ch=fr.read())!=-1){System.out.println((char)ch);}fr.close();}
*****I、O操作都会涉及Windows底层资源,所以会出现异常,标准的处理异常格式是:
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());}}
- <<<I、O概述及字符流基本操作>>>
- 黑马程序员-Java I/O流(一)-IO流概述、字符流、字节流、流操作规律
- Java I/O 基本操作
- android 基本I/O操作
- I/O字符流
- I/O操作之概述与导读
- java--I/O流概述
- I/O操作,字节流,字符流,字符集编码
- Java-I/O操作之字符流、其他常用流
- I/O流操作
- I/O流操作
- I/O流操作
- I/O流操作
- I/O流操作
- Linux Bash Shell学习(三):基本I/O操作、特殊字符、控制键和帮助
- 文件 I/O字符流
- linux下基本I/O操作
- c语言 基本I/O 操作
- 数学之美系列九:如何确定网页和查询的相关性
- jquery 操作cookie
- 数据中心融合下的SAN通信
- Windows Phone 7 Dev 短信_电话_邮件
- 正确的Linux菱形乱码修改方法
- <<<I、O概述及字符流基本操作>>>
- 数学之美系列十:有限状态机和地址识别
- Activity之屏幕方向
- 数据库范式
- 解决PowerDesigner 16 Generate Datebase For Sql2005/2008 对象名sysproperties无效的问题
- sql语句将excel数据导入到表
- 《HT06,Tagging Papper, Taxonomy,Flickr,Academic Article,ToRead》
- PL/SQL 集合的初始化与赋值
- 数学之美系列十一:Google 阿卡 47 的制造者阿米特.辛格博士