——- android培训、java培训、期待与您交流! ———-
字符流
IO流是用于操作数据的,而数据的最常见体现是:文件。
所以以操作文件为主来演示字符流的特点和方法。
需求;在硬盘上,创建一个文件并写入一些文件数据。
记住:如果要操作文字数据,建议优先考虑字符流。
而且要将数据从内存写到硬盘上,要使用字符流中的输出流:Writer。
硬盘的数据基本体现是文件,希望找到一个可以操作文件的Writer:FileWriter。
Writer类
public static void main(String[] args) throws Exception//以下几个方法都会有异常,除了flush();
{
//创建一个FileWriter对象,该对象一般初始化就必须要明确被操作的文件
//而且该文件会被创建在指定的目录下,如果该目录下已有同名文件,将被覆盖。
//其实该步就是在明确数据要存放的目的地。
FileWriter fw=new FileWriter("dome.txt");
//调用writer方法,将字符串写入到流中。(暂时还没有在文件里)
fw.write("fhdsfwofwfwh");
//刷新流对象中的缓存中数据,将数据刷到目的地中(文件中)
fw.flush();
fw.write("12346532465");
//关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据
//将数据刷新到目的地中,
close和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭
fw.close();
}
Reader类
public static void main(String[] args) throws IOException
{
//创建一个文件读取流对象,和指定每次的文件相关联
//要保证该文件是已经存在的,如果不存在,会发生异常FileNoFoundException
FileReader fr = new FileReader("Demo.txt");
//调用读取流对象的read方法,fr.read();
//read():一次读一个字符,而且会自动往下续,当没有字符可以读取时,返回-1
while(true)
{
int ch =fr.read();
if(ch==-1)
break;
System.out.println("ch="+(char)ch);//进行了强转,因为read方法返回值是int格式
/*
简化格式
int ch =0;
while((ch=fr.read())!=-1)
{
System.out.println("ch="+(char)ch);
}
*/
}
}
字符流的缓冲区
字符流的缓冲区有两个类,分别是BufferedWriter和BufferedReader
缓冲区的出现是为了提高流的操作效率而出现的,所以在创建缓存去之前,必须要先有对象。
BufferedWriter
public static void main(String[] args) throws IOException
{
//创建一个字符写入流对象
FileWriter fw = new FileWriter("buf.txt");
//为了提高字符写入流效率,加入了缓存技术
//只要将需要被提高效率的对象作为参数传递给缓冲区的构造函数即可
BufferedWriter bufw = new BufferedWriter(fw);
for(int x=0;x<5;x++)
{
bufw.write("hfhffw");
bufw.newLine();//用于换行,该方法是跨平台的。
bufw.flush();//记住:只要用到缓冲区,就要记得刷新
}
//其实关闭缓冲区,就是关闭缓冲区中的流对象,所以不用再fw.close();
bufw.close();
}
BufferedReader
public static void main(String[] args) throws IOException
{
//创建一个读取流对象和文件相关联
FileReader fr = new FileReader("buf.txt");
//为了提高效率,加入缓冲技术,将字符读取流对象作为参数传递给缓存对象的构造函数
BufferedReader bufr = new BufferedReader(fr);
String line = null;
while((line=bufr.readLine())!=null)
{
System.out.println(line);
}
bufr.close();
}