用于日常学习:
IO流,是在内存和硬盘之间进行数据传输的方式,例如,想要将硬盘上的文本文件读入到内存当中就需要IO流的操作,IO流也是输入(读)输出(写)流,输入输出流是相对而言的。根据流向分为输入流和输出流,一般我们写的程序都是运行在内存当中,所以,我们将硬盘上的文件读入到内存(也就是我们写的程序当中)叫做输入流InputStream,相反,如果我们将内存中的文件写到硬盘文件中,叫做输出流OutputStream。根据传输的类型,比如如果是文本文件,通过字符char[]数组传输,我们把这种流叫做字符流,一般字符流是以Writer/Reader结尾;如果传输的是音频、音乐、视频等文件,我们需要用字节byte[]数组进行传输,我们把这种流叫做字节流。
我们常用的流有:
文件类型的字节输入输出流:FileInputStream/FileOutputStream、文件类型的字符输入输出流:FileReader/FileWriter;
转换流:InputStreamReader/OutputStreamReader,这种转化流是将字节流转化为字符流;
缓冲流:BufferedInputStream/BufferedOutputStream/BufferedReader/BufferedWriter,BufferedReader有readLine()方法,一读读一行,对文本类型的文件这种方法代码简单,读取方便,BufferedWriter写的时候可以写String类型的字符串,读写比较方便;
数据流:DataInputStream/DataOutputStream,数据流可以写byte,short,int,long,float,double,boolean,char类型的数据,在进行读取的时候要按照写的顺序进行读取,否则读取失败,可用于知道规则的加密
标准输出流:PrintWriter/PrintStream,可用于输出到控制台的流,也可以改变输出的方向,例如日志文件
对象专属流:ObjectInputStream/ObjectOutputStream
文件拷贝代码
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
//将source.txt里的内容拷贝到123.txt
fis = new FileInputStream("D:/source.txt");
fos = new FileOutputStream("D:/123.txt");
//读写一次操作的字节数大小
byte[] bytes = new byte[1024*1024];
int temp = 0;
while((temp = fis.read(bytes)) != -1){
fos.write(bytes,0,temp);
}
//输出流刷新
fos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
//流关闭
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fis != null) {
try {
//流关闭
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}