FILE与IO流关系
- File中的方法,仅涉及到如何创建、删除、重命名等
- 如果涉及文件内容的,File是无能为力的,必须由IO流来完成
- File类的对象常作为IO流的具体类的构造器的形参
IO流
抽象基类
InputStream(字节流 8bit)
OutputStream(字节流 8bit)
Reader(字符流 16bit)
Writer(字符流 16bit)
节点流
FileInputStream(字节流 8bit)
FileOutputStream(字节流 8bit)
FileReader(字符流 16bit)
FileWriter(字符流 16bit)
缓冲流
BufferedInputSteam(字节流)
BufferedOutputStream(字节流)
BufferedReader(字符流)
BufferedWriter(字符流)
- “字符流”主要用于文本文件(.txt),其他的都需使用“字节流”
- “缓冲流”比“节点流”的读取速度更快,优先推荐这一种
@Test
public void testIO() {
long start = System.currentTimeMillis();
String src = "Premium Watch介绍.pptx";
String dest = "Premium Watch_Copy.pptx";
copyFile(src, dest);
long end = System.currentTimeMillis();
System.out.println("消耗时间为: " + (end - start)); //3.1M -> 138ms
}
public void copyFile(String src, String dest) {
//1. 提供读入、写出的文件
File file1 = new File(src);
File file2 = new File(dest);
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
//2. 提供相应的节点流
FileInputStream fis = new FileInputStream(file1);
FileOutputStream fos = new FileOutputStream(file2);
//3. 将创建的节点流对象作为形参传递给缓冲流
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos);
//4. 实现文件的复制
byte[] b = new byte[1024];
int len;
while ((len = bis.read(b)) != -1) {
bos.write(b, 0, len);
bos.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 5. 关闭相应的流
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}