字节流的抽象基类:
inputstream
outputstream
字符流的抽象基类
Reader
Writer
因为是抽象的,所以要通过子类来创建对象,子类名称都是;以父类名作为子类名的后缀,如:Inputstream的子类FileinputStream
写一个文件到硬盘上
通过Writer--OutpustreamWriter--FileWriter
FileWreter:用来操作文件的字符串输出流对象;
FileWriter fw=new FileWriter(file); //建立对象时,需要有文件写入地址 (存放即将写入的数据) ,大部分io操作,都会有异常
可以通过fw的write方法,将数据写出
fw.write("abcde")
然后通过刷新,写到文件中。字节流不用刷新,最后关资源 ,
创建io对象要在外面创建对流对象的引用,在try里面对对象进行初始化,
在finally进行关闭时,要单独用一个try进行处理,判断一下文件是否存在,
如果要写入回车换行符:xindow需要进行/r/n linux里面要/n
读一个硬盘上的文件
FileReader fr=new FileReader("文件位置");//创建了一个读取流对象,并关联要读取的文件
char[] buf=new char[1024]; //因为要往read方法中传递一个字符数组,//所以要先定义一个数组(缓冲区),里面要有数组的长度,一般为1024的整数倍,
int len=0
while((len=fr.read(buf))!=-1){
}
练习:
复制文本:
进行try 处理
FileReader fr=new FileReader("文件位置");//创建读取流对象,和源文件相关联
FileWriter fw=new FileWriter(file); //创建一个目的文件,存储数据
char[] buf=new char[1024];//建立一个缓冲区
int len=0;
while((len=fr.read(buf))!=-1){
fw.write(buf,0,len);
}
//带缓冲技术的字符输出流对象
FileWriter fw=new FileWriter("bufdemo.txt");
BufferedWriter bufw=new BufferedWriter(fw);//缓冲区对象的存在为了给流提高效率,所以缓冲区对象的建立,必须将流初始化进来,
bufw.write("hehe");
bufw.newLine(); //依据不同的平台,进行换行的操作
bufw.flush();//只要用到了字符缓冲区,一定要刷新,
bufw.close();//不用关闭了fw了,关闭缓冲区,其实就是在关闭流。
//演示字符流的读取缓冲区。
FileReader fr=FileReader("要读取的文件");
BufferedReader bufr=new BufferedReader(fr);
String line=null;
while((line=bufr.readLine())!=null)
{
}
用已有的缓冲区复制文本文件。
class CopyTextBuf{
public static void main(String[] args){
FileReader fr=null;
BufferedReader bufr=null;
FileWriter fw=null;
BufferedWriter bufw=null;
try{
fr=new FileReader("源文件");
butr=new BufferedReader(fr);
fw=new FileWriter("目的地");
bufw=new BufferedWriter(fw);
String line=null;
while((line=bufr.readLine())!=null){
bufw.write(line);
bufw.newLine();
bufw.flush();
}
}
catch(IOException e)
{
throw new RuntimeException("读写失败");
}
finally{
try{
if(bufw!=null)
bufw.close();
}
catch(IOException e)
{
throw new RuntimeException("写入关闭失败");
}
try{
if(bufr!=null)
bufr.close();
}
catch(IOException e)
{
throw new RuntimeException("读取关闭失败");
}
}
}
}