字节流:inputstream,outputstream
字符流:Reader,Writer
* 字符流中的对象融合了编码表,也就是系统默认的编码表。我们的系统一般都是GBK编码。
* 字符流只用来处理文本数据,字节流用来处理媒体数据。
* 数据最常见的表现方式是文件,字符流用于操作文件的子类一般是FileReader和FileWriter。
注意事项:
* 写入文件后必须要用flush()刷新。
* 用完流后记得要关闭流
* 使用流对象要抛出IO异常
* 定义文件路径时,可以用“/”或者“\\”。
* 在创建一个文件时,如果目录下有同名文件将被覆盖。
* 在读取文件时,必须保证该文件已存在,否则出异常
示例1:在硬盘上创建一个文件,并写入一些文字数据
//flush和close的区别:flush刷新后可以继续输入,close刷新后不能继续输入。
class FireWriterDemo {
publicstaticvoid main(String[] args)throws IOException {//需要对IO异常进行处理
//创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件。
//而且该文件会被创建到指定目录下。如果该目录有同名文件,那么该文件将被覆盖。
FileWriter fw =new FileWriter("F:\\1.txt");//目的是明确数据要存放的目的地。
//调用write的方法将字符串写到流中
fw.write("hello world!");
//刷新流对象缓冲中的数据,将数据刷到目的地中
fw.flush();
//关闭流资源,但是关闭之前会刷新一次内部缓冲中的数据。当我们结束输入时候,必须close();
fw.write("first_test");
fw.close();
//flush和close的区别:flush刷新后可以继续输入,close刷新后不能继续输入。
}
}
示例2:FileReader的reade()方法.
要求:用单个字符和字符数组进行分别读取
class FileReaderDemo {
publicstaticvoid main(String[] args) {
characters();
}
/*****************字符数组进行读取*********************/
privatestaticvoid characters() {
try {
FileReader fr =new FileReader("Demo.txt");
char [] buf =newchar[6];
//将Denmo中的文件读取到buf数组中。
int num =0;
while((num = fr.read(buf))!=-1) {
//String(char[] value , int offest,int count) 分配一个新的String,包含从offest开始的count个字符
sop(new String(buf,0,num));
}
sop('\n');
fr.close();
}
catch (IOException e) {
sop(e.toString());
}
}