Java的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在 Java中把不同的输入/输出源(键盘、文件、网络连接等)抽象表述 为“流”(stream),通过流的方式允许Java程序使用相同的方式来访问不同的输入输出源。 stream是从起源(source)到接收(sink)的有序数据。Java把所有传统的流类型(类或抽象类)都放在java.io包中,用以实现输入输出功能。IO(输入/输出)流是比较抽象的,看不到明显的运行效果,但输入和输出是所有程序都必需的部分。使用输入机制,允许程序读取外部数据(包括来自磁盘、光盘等存储设备的数据、来自网络的数据)、用户输入数据;使用输出机制,允许程序记录运行状态,将程序数据输出到磁盘、光盘等存储设备中和网络其他设备中。Java的IO通过java.io包下的类和接口来支持,在java.io包下主要包括输入流、输出流两种IO流,每种输入、输出流又可分为字节流和字符流两大类。其中字节流以字节为单位来处理输入、输出操作,而字符流则以字符来处理输入、输出操作。除此之外Java的IO流使用了一种装饰器设计模式,它将IO流分成底层节点流和上层处理流,其中节点流用于和底层的物理存储节点直接关联(不同的物理节点获取节点流的方式可能存在一定的差异),但程序可以把不同的物理节点流包装成统一的处理流,从而允许程序使用统一的输入、输出代码来读取不同的物理存储节点的资源。
下面是复制文件的代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestDemo {
public static void main(String[] args) throws IOException {
File source = new File("D:/测试文件/源文件.txt");
File dest = new File("D:/测试文件/源文件2.txt");
CopyFile(source, dest);
}
public static void CopyFile(File source,File dest) throws IOException{
FileInputStream in = new FileInputStream(source);
FileOutputStream out = new FileOutputStream(dest);
byte[] bs = new byte[1024];
int count = 0;
while ((count=in.read(bs, 0, bs.length))!=-1) {
out.write(bs,0,count);
}
in.close();
out.flush();
out.close();
}
}
下面是结果图:
输入流和输出流是按照流的流向来分,都是从程序运行所在内存的角度来划分的。输入流:只可以读取数据,而不可以写入数据,由InputStream和 Reader作为基类;输出流:只可以写入数据,而不可以读取数据,由OutputStream和 Writer作为基类。