——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——
学习毕向东老师视屏第二天
java中io流的概述
io中如果以流向来分类:1:输入流 2:输出流
如果以操作数据来分类:1:字节流 2:字符流
* io流常用的四个抽象类为基类:inputStream ,outputStream ,Reader读者 ,Writer 写者
* * io流以以字节流:inputStream , outputStream 的抽象类为基类(也就是父类)
* * io流以字符流:Reader ,Writer 的抽象类为基类(也就是父类)
* * 以这四个基类派生出的子类都是:以他们为后缀的,例如:InputStraem 的子类 FileInputStream
* 以他们为后缀的,例如:Writer 的子类 FileWriter 前面是功能名+父类名
* 一般情况都是 输 入 和 输 出 都是一一对应的
* new FileWriter(“str”,true); 次构造函数 该对象可以续写
* 写入内容 换行 \r\n
这里写代码片
- package com.kaka.io;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* io中如果以流向来分类:1:输入流 2:输出流
*
* 如果以操作数据来分类:1:字节流 2:字符流
*
* io流常用的四个抽象类为基类:inputStream ,outputStream ,Reader读者 ,Writer 写者
*
* io流以以字节流:inputStream , outputStream 的抽象类为基类(也就是父类)
*
* io流以字符流:Reader ,Writer 的抽象类为基类(也就是父类)
*
* 以这四个基类派生出的子类都是:以他们为后缀的,例如:InputStraem 的子类 FileInputStream
* 以他们为后缀的,例如:Writer 的子类 FileWriter 前面是功能名+父类名
* 一般情况都是 输 入 和 输 出 都是一一对应的
*
* new FileWriter(“str”,true); 次构造函数 该对象可以续写
* 写入内容 换行 \r\n
*
*
* @author Administrator
*
*/
public class test1 {
/**
* 关于字符流的操作
* 字符流的特点
*
*
*
* @param args
*/
public static void main(String[] args) {
//第一次创建(在c盘下面)一个文件并写入内容
FileWriter fw=null;
//读取刚才写入的文件
FileReader fr=null;
//第二次把刚才读到的文件写入d盘
FileWriter fw1=null;
try {
//写入的文件到c盘下文件名为luo.txt
//此文件可以续写(true)
fw=new FileWriter("c:\\luo.txt",true);
//如何在写入记事本内容 换行问题 \r\n
fw.write(" 我是续写类容 \r\n ");
//把上一次的文件覆盖了
fw.write("没new一次就是一个新的对象~~~~~~~");
fw.flush();
fw.write("kakaka");
fw.flush();
//读出文件到流中
fr=new FileReader("c:\\luo.txt");
//字符的长度 数组里面的长度是每次读的字符的长度,下面每次读1024个字符
char [] cbuf=new char[1024];
int length=-1;
while((length=fr.read(cbuf))!=-1){
String str = new String(cbuf,0,length);
System.out.println(str);
//写入d盘
fw1=new FileWriter("d:\\luo.txt");
//写入类容
fw1.write(str);
//写一次刷新一次
fw1.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(fw!=null){
fw.close();
}
if(fr!=null){
fr.close();
}
if(fw1!=null){
fw1.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
- copy的原理
- 高效率的copy文件
- copy原理 要通过流读写文件,怎么关联这两个流,是通过char[]字符数组来关联,
- 怎么刷进文件内容,通过fw.flush() 或者 fw.close()
- 上面两者的区别是:flush刷新流 (刷进去) close刷进去,但是会关闭流
- @author Administrator
这里写代码片
package com.kaka.io;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
*
* 高效率的copy文件
* copy原理 要通过流读写文件,怎么关联这两个流,是通过char[]字符数组来关联,
* 怎么刷进文件内容,通过fw.flush() 或者 fw.close()
* 上面两者的区别是:flush刷新流 (刷进去) close刷进去,但是会关闭流
* @author Administrator
*
*/
public class ReaderRuntime {
public static void main(String[] args) {
executeWriter();
}
private static void executeWriter() {
// TODO Auto-generated method stub
FileReader fr=null;
FileWriter fw=null;
try {
fr=new FileReader("C:\\Documents and Settings\\Administrator" +
"\\桌面\\HeiMa\\src\\com\\kaka\\io\\test1.java");
try {
fw=new FileWriter("c:\\heima.txt");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
char [] ch=new char[1024];
int len=0;
try {
while((len=fr.read(ch))!=-1){
fw.write(ch,0,len);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(fr!=null)
try {
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(fw!=null)
try {
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
总结:常用的基类:InputStream ,OutputStream,Reader,Writer ,他们的子类都是以他们为后缀的,输入和输出流他们之间
关联是字符数组char[] , 刷进文件fw.flush(), fw.close();
天道酬勤~~~~加油