IO流:
IO流用来处理设备之间的数据传输。
Java对数据的操作是通过流的方式。
Java用于操作流的对象都在IO包中。
流按照操作数据分为两种:字节流与字符流。
流按照流向分为:输出流,输入流。
字节流的抽象基类:InputStream,OutputStream
字符流的抽象基类:Reader,Writer。
这四个基类派生出来的子类名称都是以其父类名作为子类名的后缀。前缀名一般都是该流对象的功能。
FileWriter类:该类主要是操作文件的。
一般流程:
1.创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。FileWriter fw = new FileWriter("demo.txt");//可以传递一个true参数,代表不覆盖已有的文件,并在已有文件的末尾处进行数据续写。
2.调用write方法,将字符串写入到流中。Fw.write("abcde");
3.刷新流对象中的缓冲中的数据。将数据刷到目的地中。fw.flush();
4.关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。将数据刷到目的地中。和flush的区别:flush刷新后,流可以继续使用,closeshuaxin后,会将流关闭。
FileReader:
1.创建一个文件读取流对象,和指定名称的文件相关联。要保证该文件是已经存在的,如果不存在,会发生FileNotFoundException异常。
2.【方法一】调用读取流对象的read方法。一次读一个字符。而且会自动往下读。
2.【方法二】定义一个字符数组。用于存储独到字符。该read(char[])返回的hi读到字符个数。
文件复制的过程图:
--------------------------------------------------------------------------------------
缓冲区
缓冲区的出现提高了对数据的读写效率。
对应类:bufferedwrite bufferedreader
缓冲区要结合流才可以使用。
在流的基础上对流的功能进行了增强。所以在创建缓冲区之前,必须要现有流对象。
只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可。
关闭缓冲区就是在关闭缓冲区中的流对象。该缓冲区中提供了一个跨平台的换行符(newline)。
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedDemo
{
/**
* 缓冲区写入演示
*/
public static void main(String[] args)
{
BufferedWriter bw=null;
try
{
bw=new BufferedWriter(new FileWriter("abc.txt"));
for(int x=0;x<=4;x++)
{
bw.write("abcd"+x);
bw.newLine();//写入一个行分隔符 }
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if(bw!=null)
bw.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
字符读取流缓冲区:该缓冲区提供了一个一次读一行的方法readLine,方便于对文本数据的获取。当返回null时,表示独到文件末尾。
readLine方法返回的时候只返回回车符之前的数据内容。并不返回回车符。
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
public class LineNumberReaderDemo
{
/**
* 带行号的缓冲区流
*/
public static void main(String[] args)
{
LineNumberReader lnr=null;
try
{
lnr=new LineNumberReader(new FileReader("BufferedDemo.java"));
lnr.setLineNumber(1);
String line=null;
while((line=lnr.readLine())!=null)
{
System.out.println(lnr.getLineNumber()+" "+line);
}
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if(lnr!=null)
lnr.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}