- 常用几种流
- 字节流:可以处理一切,包括文本,音频,视频,图像等
- InputStream字节输入流,读取文件
- 读取步骤:
①建立源文件对象File
②创建InputStream字节流(可以理解为管道,使用FileInputStream发生多态)
③操作:创建字节数组,将读取内容循环读入字节数组里,使用字节数组转字符串
④关闭流
- 代码:
InputStream input=null;//提升作用域 try { input=new FileInputStream(path); //步骤3:不断读取缓冲数组 byte[] data=new byte[10];// int len; //循环读取 while(-1!=(len=input.read(data))) { //输出,字节数组转成字符串 String str=new String(data,0,len); System.out.println(str); }
- OutputStream字节输出流,写入文件
- 写入步骤:
①建立源文件对象File
②创建OutputStream字节流(可以理解为管道,使用FileOutputStream发生多态,其中有一个布尔参数标志位,true表示追加源文件对象,false表示覆盖源文件,默认覆盖)
③操作:将内容字符串转成字节数组对象,写入OutPutStream,并强制在缓冲流刷出
④关闭流close
- 代码:
-
- 文件拷贝:(循环+InputStream+OutputStream)
- 写入步骤
①创建源文件对象,目的文件对象
②创建字节流(读取流+写入流)
③操作:循环+InputStream操作+OutputStream操作
④关闭:先开的流后关闭
- 代码:
public static void copyFile(File src,File dest) throws IOException
{
InputStream input=null;
OutputStream output=null;
if(!src.isFile()){
return;
}
try {
input = new FileInputStream(src);
output = new FileOutputStream(dest);
} catch (FileNotFoundException e) {
System.out.println("文件创建失败");
}
byte[] data=new byte[1024];
int len=0;
while(-1!=(len=input.read(data))) {
output.write(data, 0, len);
}
output.flush();
output.close();
input.close();
}
-
- 文件夹拷贝:
- 写入步骤
①创建源文件的夹,目的文件夹
②文件夹操作细节:
- 拷贝文件(参考1.3)
- 调用mkdirs()方法确保创建文件夹
- 递归获取子孙级文件目录
- 代码:
public static void copyFileDetail(File src,File dir) throws IOException { if(src.isFile())//文件 { try { FileUtils.copyFile(src, dir);//文件拷贝 } catch (IOException e) { e.printStackTrace(); throw e; } }else if(src.isDirectory()){ //创建文件夹 dir.mkdirs(); //获取下一级的子文件 for (File subFile : src.listFiles()) { copyFileDetail(subFile, new File(dir,subFile.getName())); } } }