IO流:用来处理设备之间的数据传输
流按操作数据分为两种:字节流和字符流
按流向分为:输入流和输出流
字节流的抽象基类:InputStream,OutputStream
字符流的抽象基类:Reader,Writer
FileWriter类:
创建该类对象时,该对象一被初始化就必须明确要被操作的文件,如果文件不存在,则会在指定目录下创建该文件,如果指定目录下有该文件,那么就会覆盖掉原来的文件。
import java.io.*;
class FileWriterDemo
{
public static void main(String[]args)
{
try
{
FileWriter fw=new FileWriter("File.txt");
fw.write('i');
fw.write(" love china");//写入是写到流里,即内存的缓冲区
fw.flush();//这里刷新才能将缓冲区的数据传入到指定文件
fw.close();//操作文件后要关闭流
}
catch(IOException e)
{
System.out.println("file error");
}
}
}
IO异常的处理方法
import java.io.*;
class FileWriterDemo
{
public static void main(String[]args)
{
FileWriter fw=null;//因为fw是全局的,所以必须创建在外,所有的代码块才都能用到。
try
{
fw=new FileWriter("File.txt");
fw.write(" love china");
fw.flush();
}
catch(IOException e)
{
System.out.println("file error");
}
finally
{
try{
if(fw!=null)//当文件创建出异常时,fw指向null,没有可关闭的文件,所以会抛出空指针异常,为了增加代码健壮性,最好添加判断
fw.close();
}
catch(IOException e)
{
System.out.println("file error");
}
}
}
}
如果想在已有文件后面添加数据,只需要创建文件时用另一个构造方法
FileWriter(String fileName, boolean append);
当为true时,即确定在当前文件后面添加数据。
FileReader类:里面有读取文件的一些方法。
import java.io.*;
class FileReaderDemo
{
public static void main(String []args)throws IOException
{
FileReader fr=new FileReader("File.txt");
int ch=' ';
while((ch=fr.read())!=-1)
{
System.out.println((char)ch);
}
}
}
实现将一个文件复制的方法
import java.io.*;
class CopyDemo
{
public static void main(String []args)throws IOException
{
FileReader fr=new FileReader("D:\\Copy.txt");
FileWriter fw=new FileWriter("E:\\Copy.txt");
char []buf=new char [1024];
int num=0;
while ((num=fr.read(buf))!=-1)
{
fw.write(buf);
}
fr.close();
fw.close();
}
}
缓冲区:为了提高数据的传输效率
BufferedWriter类:缓冲区写入
import java.io.*;
class BufferWriterDemo
{
public static void main(String[]args)throws IOException
{
FileWriter fw=new FileWriter("buff.txt");
BufferedWriter bfw=new BufferedWriter(fw);
for(int i=0;i<5;i++)
{
bfw.write("第"+i+"次");
bfw.newLine();
bfw.flush();
}
bfw.close();//只需关闭缓冲区即可,不用再关闭流对象
}
}
BufferedReader类:缓冲区读取
import java.io.*;
class BufferedReaderDemo
{
public static void main(String[]args)throws IOException
{
FileReader fr=new FileReader("buff.txt");
BufferedReader bfw=new BufferedReader(fr);
String s1=" ";
while ((s1=bfw.readLine())!=null)//readLine()读取一行的文本
{
System.out.println(s1);
}
bfw.close();
}
缓冲区实现复制的方法
import java.io.*;
class BufferedCopyDemo
{
public static void main(String[]args)throws IOException
{
FileReader fr=new FileReader("buff.txt");
BufferedReader bfr=new BufferedReader(fr);
FileWriter fw=new FileWriter("buff_copy.txt");
BufferedWriter bfw=new BufferedWriter(fw);
String s=" ";
while((s=bfr.readLine())!=null)
{
bfw.write(s);
bfw.newLine();
}
bfr.close();
bfw.close();
}
}