IO流就是input、output的简写,也就是说输入输出流,它是用来处理设备之间的数据传输的,java对数据的操作都是通过流的方式,流按操作数据可分为字符流和字节流,按流向的话分为输入输出流,并且java操作流的对象都在IO包里。
字节流的抽象基类: InputStream(读进来)、OutputStream(写出去)
字符流的抽象基类:Reader、Writer
(1)、FileReader(Reader的子类)和FileWriter(Writer的子类)的例子
File f = new File("E:\\aa.txt");
FileReader fr=null;
FileWriter fw=null;
try{
if(f.exists())
{//文件存在
// f.delete();
//读数据
fr = new FileReader(f); // 创建一个文件流读取对象,和指定的文件相关联
//一次读一个字符
while(true)
{
int i = fr.read(); //读取一个字符
System.out.print((char)i);
if(i==-1) //当fr.read()返回为-1时,表示已经到了文件末尾
{
return;
}
}
//进行字符数组进行读取
char [] buf = new char[1024];
int num = fr.read(buf); //有一个数组参数,则返回的是文件的数据个数
System.out.println(new String(buf,0,num));
fr.close();
}else{//文件不存在
//写进去数据,如没有该文件,会自动创建
fw = new FileWriter(f);
fw.write("我是中国人");
fw.write("\r\n");
fw.write("我也是");
fw.flush(); //刷新文件缓存
}
}catch(Exception e)
{
System.out.println(e.toString());
}
finally{
try {
if(fw!=null)
{
fw.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
(2)、对文件数据的续写
File f = new File("E:\\aa.txt");
//传递一个true参数时,表示不覆盖文件,而是在文件的末尾处进行续写
FileWriter fw = new FileWriter(f,true);
(3)、实现文件的拷贝
原理:1,在目标处创建一个和源一样的文件,用以存储源文件的数据
2,定义读取流和源文件相关联
3,通过不断的读写,完成文件的数据复制
4,close();关闭资源
FileReader fr = new FileReader("E:\\aa.txt"); //读
char [] buf = new char[1024];
int num = fr.read(buf);
FileWriter fw = new FileWriter("E:\\bb.txt"); //写
fw.write(buf,0,num);
fw.flush();
fr.close();
fw.close(); //需要捕捉异常,这里免写了,统一throws
(4)、BufferedReader、BufferedWriter 将文本写入到流,缓冲各个字符,从而提供单个字符、数组的高效读写,
// 构造方法1、BufferedWriter(Writer out),2、BufferedWriter(Writer out,int sz)
// 在创建缓冲区之前,必须有流对象
//该对象提供了一个跨平台的换行符,newLine();
FileWriter fw = new FileWriter("E:\\aa.txt");
BufferedWriter bufw = new BufferedWriter(fw);
bufw.write("asdsa");
bufw.flush();
bufw.close();
FileReader fr = new FileReader("E:\\aa.txt");
BufferedReader bufr = new BufferedReader(fr);
/* char [] buf = new char[1024];
int num = bufr.read(buf);
System.out.println(new String(buf,0,num));*/
String line=null;
while((line=bufr.readLine())!=null) //readLine()读取文本文件的一行
{
System.out.println(line);
}
bufr.close();