IO(Input Output)流
✔IO流用来处理设备之间的数据传输
✔Java对数据的操作是通过流的方式
✔Java用于操作流的对象都在IO包中
✔流按操作数据分为两种:字节流与字符流
✔流按流向分为:输入流,输出流
字符流:里面包含解码表(GBK,Unicode,ascii等)主要操作字符文字.可以指定编码表进行操作
IO流主要就是,围绕读写展开的
字节流两个基类:
InputStream OutputStream
字符流两个基类:
Reader Writer
字符流的特点.
既然IO流用于操作数据的,那么数据的最常见体现形式就是:文件
首先,在硬盘上,创建一个文件并写入一些文字数据玩玩.
找到一个专门操作文件的Writer子类对象,FileWriter,
后缀名是父类名,前缀名是该流对象的功能.
import java.io.*;
class FileWriterDemo
{
public static void main(String[] args)throws IOException
{
/*到复制*****
//创建并写入数据
//创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件
//而且该文件会被创建到制定的目录下.如果该目录下已有同名文件,将被覆盖
//该步就是在明确数据要存放的目的地.
FileWriter fw=null;
try
{
//只要一 new就是一个新对象和一个新文件,想要续写的话就传递一个true参数.
fw=new FileWriter("demo.txt",true);
//调用write();方法,将字符长写入到流中.注意这里win下回车是\r
fw.write("你好\r\n谢谢");
//flush()刷新缓冲数据,将数据刷到目的地flush[冲洗]
fw.flush();
}
catch(IOException e)
{
System.out.println(e.toString());
}
finally
{
//关闭流资源,关闭之前会刷新一次内部的缓冲数据,将数据刷到目的地中,最终都要关闭该流
try
{
//进行判断,避免空指针异常.万一,new FileWriter没常见成功.
if(fw!=null)//****
fw.close();
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
//读取数据***********************
//创建一个文件读取流对象,和指定名称的文件相关联.
//要保证该文件是已经存在的,如果不存在,会发生异常.FileNotFoundException
FileReader fr=new FileReader("demo.txt");
//*****第一种,,调用读取流的read()方法,特性,自动往下读数据,到末尾会返回-1标识;
while(true)第一种循环读取
{
int ch=fr.read();
if(ch==-1)
break;
System.out.print((char)ch);
}
//第二种循环读取,,,顶...
int ch=0;
while((ch=fr.read())!=-1){
System.out.print((char)ch);
}
read读到结尾返回-1原理图示例
//******第二种方式:通过字符数组进行读取read(char[])*****
//定义一个字符数组,用于存储读到的字符
//该read(char[])返回的是读到字符个数,,,,读一个存一个,最后读完再输出
char[] ch=new char[1024];//一般定义1024的整数倍
int num=0;
while((num=fr.read(ch))!=-1){
System.out.print(new String(ch,0,num));
}
*/
//******************复制
//实际上就是,不断的读取
//新建一个文件来接收,,要复制的数据.就是,复制后的文件
FileWriter fw=new FileWriter("copy.txt");
//制定要复制的文件
FileReader fr=new FileReader("StringTest.txt");
//第一种,,,循环读取.
int num=0;
/*while((num=fr.read())!=-1){//效率低,频繁读写
fw.write((char)num);
}*/
//第二种先对来说,以下方式比较高效,读完1024写一次.
char[] ch=new char[1024];
while((num=fr.read(ch))!=-1){
fw.write(ch,0,num);
}
//记着关掉流,有多少关多少..
fw.close();
fr.close();
}
}
复制原理图示: