IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的对象都在IO包中。
流按操作数据分为字节流和字符流,按流向分为输入流,输出流。
字节流的抽象基类:
InputStream和OutputStream
字符流的抽象基类:
Reader,Writer
注:这4个类派生出的子类名称都是以其父类名作为子类名的后缀。
IO流是用于操作数据的,数据的最常见体现形式是:文件。
需求:在硬盘上,创建一个文件并写入一些数据。
FileWriter
FileReader:
import java.io.FileReader;
import java.io.IOException;
public class FileReaderTest {
public static void main(String[] args)throws IOException {
//创建一个文件读取流对象,和指定名称的文件相关联
//要保证该文件已经存在,若不存在,会发生FileNotFoundException
FileReader fr = new FileReader("demo.txt");
//read():一次读一个字符,而且会自动往下读
//范围在0~65535之间,如果已到达流的末尾,返回-1
int ch = 0;
while((ch=fr.read())!=-1){
System.out.println("ch=" + (char) ch);
}
/*
while(true) {
int ch = fr.read();
if(ch==-1)
break;
System.out.println("ch=" + (char) ch);
}
*/
fr.close();
}
}
将C盘文件复制到D盘 step: 1.在D盘创建一个文件,用于存储 2定义读取流和C盘文件关联 3.通过不断的读写完成数据存储 4.关闭资源
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CopyTest {
public static void main(String[] args)throws IOException{
copu_1();
}
//方法一:从C盘读一个字符,就往D盘写一个字符
public static void copu_1()throws IOException {
//创建目的地
FileWriter fw = new FileWriter("RuntimeDemo_copy.txt");
//与已有文件关联
FileReader fr = new FileReader("RuntimeDemo.txt");
int ch=0;
while((ch=fr.read())!=-1){
fw.write(ch);
}
fw.close();
fr.close();
}
public static void copu_2(){
//创建目的地
FileWriter fw = null;
//与已有文件关联
FileReader fr = null;
try{
fw = new FileWriter("RuntimeDemo_copy.txt");
//与已有文件关联
fr = new FileReader("RuntimeDemo.txt");
char[] buf = new char[1024];
int len=0;
while ((len=fr.read(buf))!=-1){
fw.write(buf,0,len);//写入字符数组
}
}
catch (IOException e){
throw new RuntimeException("读写失败");
}
finally {
if(fr!=null)
try {
fr.close();
}
catch (IOException e){
}
if(fw!=null)
try {
fw.close();
}
catch (IOException e){
}
}
}
}
文件复制图例:
字符流的缓冲区:
缓冲区的出现是为了提高了数据读写的效率。在创建缓冲区之前,必须先有流对象。
对应类:BufferedWriter
BufferedReader
readLine()方法原理:最终使用的是read方法一次读一个
import java.io.*;
/*
通过缓冲区复制一个.java文件
*/
public class CopyTextByBuf {
public static void main(String[] args){
BufferedReader bufr = null;
BufferedWriter bufw = null;
try {
bufr = new BufferedReader(new FileReader("BufferedWriterDemo.java"));
bufw = new BufferedWriter(new FileWriter("bufWriter_copy.txt"));
String line=null;
while( (line=bufr.readLine())!=null){
bufw.write(line);
bufw.newLine();//换行
bufw.flush();
}
}
catch (IOException e){
throw new RuntimeException("读写失败");
}
finally {
try{
if(bufr!=null)
bufr.close();
}
catch (IOException e){
throw new RuntimeException("读取关闭失败");
}
try{
if(bufw!=null)
bufw.close();
}
catch (IOException e){
throw new RuntimeException("写入关闭失败");
}
}
}
}