IO流是用来处理设备之间的数据传输,Java对数据的操作都在IO包中,流按照流向可以分为输入流和输出流,按照流的操作类型可以分为:字节流和字符流,字节流可以操作任何数据,因为数据在计算机中都是以字节形式存储的。而字符流只是操作纯字符数据,像纯中文的数据就可以用字符流来传输,比较方便。
字节流的抽象父类:InputStream和OutputStream
字符流的抽象父类:Reader和Writer
IO流对于文件的操作我们用FileInputStream 和FileOutputStream来创建对象,FileInputStream是输入流,FileOutputStream是输出流,通过这两个类,我们可以做一个拷贝文件的程序来加深对流的操作的理解。
代码截图演示:(1)字节数据流拷贝
public class Copy {
public static void main(String[] args) throws IOException{
Copy c = new Copy();
c.copy();
//c.copy1();
}
public void copy() throws IOException{
FileInputStream fis = new FileInputStream("C:\\Users\\huangxiong\\Desktop\\个人博客.txt");//关联一个文件,并给出文件绝对地址
FileOutputStream fos = new FileOutputStream("C:\\Users\\huangxiong\\Desktop\\个人博客copy.txt");//给出你要拷贝文件存放的地址和名字
byte [] arr = new byte[1024];//定义一个小数组,来提高每次输入和输出的字节个数,提高效率,因为是字节流,所以我们用byte类型。
int len;
while((len=fis.read(arr))!=-1){ //如果读到文件的末尾,read()返回的值为-1,用这个作为文件拷贝完成与否的判断,
fos.write(arr,0,len); //将读到的数据通过输出流写到新建的文本上,完成文件的拷贝
}
fis.close(); //拷贝完成关闭流,
fos.close();
}
(2)字符数据拷贝
public class Copy {
public static void main(String[] args) throws IOException{
Copy c = new Copy();
//c.copy();
c.copy1();
}
public void copy1() throws IOException {
FileReader fr = new FileReader("C:\\Users\\huangxiong\\Desktop\\字符流测试文档.txt");
FileWriter fw = new FileWriter("C:\\Users\\huangxiong\\Desktop\\字符流测试文档copy.txt");
char[] arr = new char[1024];
int len;
while((len=fr.read(arr))!=-1){
fw.write(arr,0,len);
}
fr.close();
fw.close();
}
}
流的使用的注意事项:
FileWriter fw = new FileWriter("C:\\Users\\huangxiong\\Desktop\\字符流测试文档copy.txt");在创建输出流对象的时候,系统会查找该路径下有没有改文件,如果有,就直接室友该文件,不过该文件会被清空,如果没有,系统会给我们创建一个新文件。那么如果我们要将拷贝的内容续写在文件的结尾时,我们可以加一个参数,像这样:FileWriter fw = new FileWriter("C:\\Users\\huangxiong\\Desktop\\字符流测试文档copy.txt",true);给一个true参数,这样就会在文件末尾进行续写,而不是清空文件。