今天学习IO流中的字节流,使用了IO流中的这四个类:
File; FileInputStream; FileOutputStream; OutputStream;
例子:拷贝一张图片,从一个目录到另外一个目录下(PS:是拷贝是不是移动)
这里因为是拷贝图片,所以要用字节流,代码如下:
package ioStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class MovePicture {
public static void main(String []args)throws Exception{
File f = new File("D:\\eclipse-workspace\\test\\src\\DataStructutil\\1.jpg");
OutputStream out = null;
out = new FileOutputStream("f");
File f1 = new File("D:\\eclipse-workspace\\test\\src\\ioStream\\1.jpg");
//f.renameTo(f1); 这行代码执行后会将1.jpg剪切到目标文件夹。但并不是复制。
try {
if(!f1.createNewFile()) {
System.out.println("createfiel error");
}
FileInputStream fin = new FileInputStream(f);
FileOutputStream fos = new FileOutputStream(f1);
byte[] b = new byte[(int)f.length()];//这里没必要直接new byte[1024];可以根据要使用的大小来new
fin.read(b);
int len = b.length;
fos.write(b, 0, len);
fos.flush();//字符流使用了缓冲区,而字节流没有使用缓冲区。
fin.close();
fos.close();//字节流就算没有关闭输出流也能直接输出,证明了字节流是直接操作文件本身的。
System.out.println("复制成功!");
}catch(Exception e){
e.printStackTrace();
}
}
}
运行结果:
复制成功!
IO的分类其实有很多种,如果是按是否堵塞,可以分为堵塞(BIO)和非堵塞(NIO);如果是按照读取来源,可以分文件IO和socket IO,而对于处理对象,可以分为字节IO和字符IO。另外,有部分辅助的IO,主要是用于处理缓存(例如BufferedReader)或者字符串处理的(PrintWriter)。