I/O 流
输入流的几个常用方法:
1,复制一个文件;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; public class copyDeno { public static void copy(String src, String dest) {//src 原文件,dest 待复制的文件
//这儿需要加下判断src是否为文件和是否存在,
InputStream in = null;
OutputStream out = null;
byte[] b = new byte[1024];
int len;
try {
in = new FileInputStream(src);
out = new FileOutputStream(dest);
while ((len=in.read(b) )!= -1) {
out.write(b,0,len);
} } catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (out != null) {
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} }
public static void copyWithBuffer(String src, String dest) {//以上加入缓冲流
InputStream in = null;
OutputStream out = null;
byte[] b = new byte[20];
int len;
try {
in = new BufferedInputStream(new FileInputStream(src));
out =new BufferedOutputStream(new FileOutputStream(dest));
while ((len=in.read(b) )!= -1) {
out.write(b,0,len);
}
//out.flush();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
Release.free(in, out); }
}
public static void main(String[] args) throws IOException { copy("F:\\Word\\eclipseword\\a4\\file\\a.txt", "F:\\Word\\eclipseword\\a4\\copyfile\\a1.txt");
copyWithBuffer("F:\\Word\\eclipseword\\a4\\file\\b.txt", "F:\\Word\\eclipseword\\a4\\copyfile\\b1.txt"); }
}
封装一个关闭流(释放资源)方法:
package IO; import java.io.Closeable;
import java.io.IOException;
public class Release {
public static void free(Closeable...stream){
for(Closeable st:stream){
if(st != null){
try {
st.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} }
}
2,复制一个文件夹的所有内容到另外一个文件夹中
package IOfuxi;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import IO.Release;
/*复制多级文件夹
* A:封装数据源File
* B:封装目的地File
* C:判断该File是文件夹还是文件
* a:是文件夹
* 就在目的地目录下创建该文件夹
* 获取该File对象下的所有文件或者文件夹File对象
* 遍历得到每一个File对象
* 回到C
* b:是文件
* 就复制(字节流)
* */
public class CopyFolderduo {
public static void main(String[] args) throws IOException {
copyfolder("F:\\Word\\eclipseword\\a4\\file",
"D:\\Java视频\\day21\\day21");
}
private static void copyfolder(String src,String des) throws IOException{
File file=new File(src);
File newfile=new File(des);
//判断文件是否存在
if(!file.exists()||!newfile.exists()){
return;
}else{
fuzhi(file,newfile);
}
}
private static void fuzhi(File file, File newfile) throws IOException {
// 判断该File是文件夹还是文件
if(file.isDirectory()){
File newFloder=new File(newfile,file.getName());
//创建目标路径文件夹
newFloder.mkdir();
//// 获取该File对象下的所有文件或者文件夹File对象
File[] arrfile=file.listFiles();
for(File f:arrfile){
//递归调用
fuzhi(f,newFloder);
}
}else{
File newf=new File(newfile,file.getName());
copyfile(file,newf);
}
}
//复制文件的方法
private static void copyfile(File file, File newf) throws IOException {
BufferedInputStream in= new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream(newf));
byte[] arr=new byte[1024];
int len;
while((len=in.read(arr))!=-1){
out.write(arr, 0, len);
out.flush();
}
// out.flush();
Release.free(in,out);
}
}
3.压缩一个文件夹
package zy823; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; public class zipFolder {
public static void zipFile(String src,String dest){
ZipOutputStream zos = null;
try {
zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(dest)));//
File fileSrc = new File(src);
if(!fileSrc.exists()){
throw new FileNotFoundException();
}else{
zip(fileSrc.getName(),zos,fileSrc);
zos.flush();
zos.close();
}
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
private static void zip(String dest,ZipOutputStream zos,File src)throws Exception{
byte[] b = new byte[1024];
InputStream is = null;
if(src.isFile()){
zos.putNextEntry(new ZipEntry(dest));
is = new BufferedInputStream(new FileInputStream(src));
int len;
while((len = is.read(b)) != -1){
zos.write(b, 0, len);
}
zos.flush();
is.close();
zos.closeEntry();
}else{
File[] files = src.listFiles();
zos.putNextEntry(new ZipEntry(dest+"/"));
for(File temp:files){
zip(dest+"/"+temp.getName(),zos,temp);
}
}
} }
I/O 流的更多相关文章
- 使用C#处理基于比特流的数据
使用C#处理基于比特流的数据 0x00 起因 最近需要处理一些基于比特流的数据,计算机处理数据一般都是以byte(8bit)为单位的,使用BinaryReader读取的数据也是如此,即使读取bool型 ...
- HTML 事件(三) 事件流与事件委托
本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...
- FILE文件流的中fopen、fread、fseek、fclose的使用
FILE文件流用于对文件的快速操作,主要的操作函数有fopen.fseek.fread.fclose,在对文件结构比较清楚时使用这几个函数会比较快捷的得到文件中具体位置的数据,提取对我们有用的信息,满 ...
- java.IO输入输出流:过滤流:buffer流和data流
java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...
- java 字节流与字符流的区别
字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作 ...
- BZOJ 3504: [Cqoi2014]危桥 [最大流]
3504: [Cqoi2014]危桥 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1407 Solved: 703[Submit][Status] ...
- java I/O流
输入流(读取数据的流) BufferedInputStream---继承--->FileInputStream--继承--->InputStream------> (1)字节流操作中 ...
- Ford-Fulkerson 最大流算法
流网络(Flow Networks)指的是一个有向图 G = (V, E),其中每条边 (u, v) ∈ E 均有一非负容量 c(u, v) ≥ 0.如果 (u, v) ∉ E 则可以规定 c(u, ...
- .NET基础拾遗(3)字符串、集合和流
Index: (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基础 ...
- C#开源实现MJPEG流传输
本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 许久以前写了篇文章<基于.NET打造IP智能网络视频监控系统>,记录和介绍了自己几年来积 ...
随机推荐
- Lisp经典算法
求平方根 SUCCESSIVE AVERAGING DUE TO HERON OF ALEXANDRIA ** TO FIND AN APPROXIMATION TO SQRT(X) ** MAKR ...
- 【模板】ac自动机
本来是真的特别不想写这个的 但是有段时间洛谷天天智推这个可能是我太菜了 然后觉得这个也不难 乘着今早没事写下 来这保存下 方便下次食用 #include <bits/stdc++.h> u ...
- 洛谷P2486 染色
LCT的一种姿势. 题意:给定一棵树.每次把一条路径上的点染成一种颜色,求一条路径上有多少段颜色. 解: 首先可以很轻易的用树剖解决,只不过代码量让人望而却步... 有一种难以想象的LCT做法... ...
- Remote debugger is in a background tab which may cause apps to perform slowly. Fix this by foregrounding the tab (or opening it in a separate window).
先上代码: /** * Sample React Native App * https://github.com/facebook/react-native * * @format * @flow * ...
- CAS (多线程保证原子性)
面试必问的CAS,你懂了吗? 置顶 2018年03月14日 22:29:19 程序员囧辉 阅读数:29612 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csd ...
- java操作redis集群配置[可配置密码]和工具类(比较好用)
转: java操作redis集群配置[可配置密码]和工具类 java操作redis集群配置[可配置密码]和工具类 <dependency> <groupId>red ...
- Myeclipse启动报错:An error has occurred.See the log file
出现这个问题是因为断电前myeclipse还在运行,日志报错如下: !ENTRY org.eclipse.osgi 4 0 2017-07-24 08:29:48.485 !MESSAGE An er ...
- myBatis:not bind 问题
[13/07/16 03:25:44:044 CST] localhost-startStop-1 INFO pool.DruidDataSource: {dataSource-1} closed [ ...
- jRebel与xRebel的使用
jRebel: https://blog.csdn.net/liuzhigang828/article/details/72875190 xRebel: https://blog.csdn.net/a ...
- i2c框架
目录 i2c框架 寄存器 主机发送 主机接收 中断处理 程序框架 title: iic框架 tags: ARM date: 2018-11-05 13:44:58 --- i2c框架 寄存器 /* 配 ...