传统IO模型——流模型
Java IO分类
文件输入/输出流
FileInputStream/FileReader
FileOutputStream/FileWriter
示例:文件拷贝(字节流)
public void doCopy(){
FileInputStream fis = null;
FileOutputStream fos = null;
try{
fis = new FileInputStream(sourceFile);
fos = new FileOutputStream(newFile);
byte[] buffer = new byte[1024];
int hasRead = 0;
while((hasRead=fis.read(buffer))>0){
fos.write(buffer,0,hasRead);
}
}catch(IOException e){
}finally{
if(fis != null)
fis.close();
if(fos != null)
fos.close();
}
}
文件拷贝(字符流)
pubilc void doCopy(){
FileReader fr = null;
FileWriter fw = null;
try{
fr = new FileReader(sourceFile);
fw = new FileWriter(newFile);
char[] buffer = new char[32];
int hasRead = 0;
while((hasRead = fr.read(buffer)>0)){
fw.write(buffer,0,hasRead);
}
}catch(){}finally{}
if(fr != null)
fr.close();
if(fw != null)
fw.close();
}
包装流 :
隐藏底层设备上的节点流的差别。对外提供更加方便的输入/输出方法。
如:利用PrintStream输出字符串和对象——PrintStream.println(String) ,PrintStream.println(Object);
//节点流
FileOutputStream fos = new FileOutputStream(file);
//节点流 --> 包装流
PrintStream ps = new PrintStream(fos);
ps.println(string);
ps.println(object);
BufferedReader.readLine()方便读取一行内容;
//InputStream --> Reader
InputStreamReader reader = new InputStreamReader(System.in);
//节点流 --> 包装流
BufferedReader br = new BufferedReader(reader);
String buffer;
while((buffer = br.readLine()) != null){
//
}
注意:如果执行输入/输出的内容是文本内容,则考虑使用字符流;
如果是二进制内容,则考虑使用字节流。
转换流 (InputStreamReader/OutputStreamWriter):
字节流 --> 字符流
InputStreamReader reader = new InputStreamReader(InputStream);
OutputStreamWriter writer = new OutputStreamWriter(OutputStream);
RandomAccessFile