对文件输入输出流的基本使用,我们结合一个简单的例子来说明。
比如,对文件的复制。
最基本的代码如下:
public boolean filecopy(String start,String end) throws IOException{
//start 是文件原始地址,end 是文件复制的目标地址
//创建文件输入流对象
java.io.FileInputStream fis=new java.io.FileInputStream(start);
//创建文件输出流对象
java.io.FileOutputStream fos=new java.io.FileOutputStream(end);
//得到流中的字节,并且,将其输出到指定文件
int t=0;
while((t=(fis.read()))!=-1){
fos.write(t);
}
// 强制输出
fos.flush();
//关闭输入流
fis.close();
//关闭输出流
fos.close();
return false;
}
throws IOException 就是对异常的处理。也可以使用try catch.(如果,不进行异常处理,程序就会报错)
文件输入输出流的对象,都是存在于内存中的。我们复制一个文件时,就是,先将,文件从硬盘(外存),输入到内存,然后,从内存输出到目标地址。
java.io 包下,有一个FileInputStream,和FileInputStream类,继承自 java.io.InputStream ,java.io.OutputIstream 类。
FileInputStream 从文件系统中某个文件中获得输入字节。 FileInputStream有三个构造方法,此时,我们选取了 使用一个文件的路径来创建输入流对象 fis,同理,来创建了输出流对象,fos.
fis调用read()方法来读取文件的字节。read()方法会有一个返回值,可以通过返回值来判断是否读取结束。当,读取结束时,read()会返回 -1.
若字节全部读取结束,再写入输出,可能因为文件较大,会出现内存内存不足的情况,为了解决这个问题,选择了这个方法:读取一个字节后,立刻写入输出。直到,fis.read()=-1,此时表示文件读取结束,此时,写入输出,也会结束了。
fos.flush(); flush() 是强制输出,因为内存处理数据的速度大于外存速度,可能出现内存已经处理结束,而外存没有,数据会堵塞在 输出流中,为了防止这一问题,强制把数据输出。
close(),则是关闭流,并释放系统资源。
这段程序的执行效率是非常低的。因为外存和内存速度差距是很大的。这时,我们可以考虑 缓存。缓存的存在就是为了平衡内外存的速度。 因此,代码优化如下:
/*
* 对文件内容进行复制
* String start,原始文件的地址
* String end ,目标文件的地址
*/
public boolean bufferedcopy(String start,String end) throws IOException{
//创建文件输入流对象
File sta=new File(start);
InputStream ins=new FileInputStream(sta);
//构造输入缓冲流
BufferedInputStream bis=new BufferedInputStream(ins);
//构造输出缓冲流
File en=new File(end);
OutputStream out=new FileOutputStream(en);
BufferedOutputStream bos=new BufferedOutputStream(out);
//得到流中的字节,并且,将其输出到指定文件
int i=0;
while((i=(bis.read()))!=-1){
bos.write(i);
}
// 强制输出
out.flush();
//关闭输入流
ins.close();
//关闭输出流
out.close();
return true;
}
笔者,测试了这两段代码的效率。复制一部1.2G 的电影,第一段代码,使用将近4个小时还没完!而第二段代码,则快了很多,使用了10分钟左右。
分享到:
相关推荐
java 文件输入输出流 实例代码java 文件输入输出流 实例代码
输入输出流和文件操作输入输出流和文件操作输入输出流和文件操作输入输出流和文件操作输入输出流和文件操作
Java文件输入输出流,详细描述了java对文件流的操作
对java输入输出流与文件处理进行详细的阐述
Java的输出输出流详解及输入输出实例 文件的基本操作
基础篇有JAVA环境搭建、Java语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java输入输出流;进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、...
Java输入输出流.pdf
1.编写应用程序,使用文件输入输出流实现文件的复制,被拷贝的源文件和复制的目标文件由命令行参数给出。 2.编写应用程序,创建一个文件输出流,向文件中分别写入以下类型数据:int、double和字符串,然后创建一个...
java输入输出流和文件操作.pdf
内容1:标准输入输出流重定向 (1) 新建一个工程demo1,设计一个类Time,成员变量为时(h)、分(m)、秒(s)。 (2) 分别为类Time重载提取运算符(>>)和插入运算符(>>)。 a. 输入格式:14 30 15 b. 输出格式:14.5042 (3) ...
JAVa输入输出流 上课做的JAVa输入输出流程序,把一个文件中的东西读出写到另一个文件中
主要为大家详细介绍了基于Java文件输入输出流实现文件上传下载功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
简单的文件流操作文件,对文件进行上传,下载功能。供初学者学习等
是带有界面的日记本,利用属性结构和文件的输入输出流实现的,对于刚学习java的同志们有很大帮助的哦,而且比较实用的,绝对路径保存,在工程文件夹下就可以找到你保存的文件,QQ:389020106,喜欢的朋友加QQ哦
输入输出流java输入输出流输入输出流输入输出流输入输出流
Java输入输出流及文件读写详解;Java输入输出流及文件读写详解。
Java_输入输出流及文件读写详解
java 输入输出流加密源码 里面详细介绍了加密流的代码,是文件的输入输出流,不过大同小异 其他io一样
android 文件操作 输入流对象 输出流对象 SDCard读写
关于java输入输出流的代码示例,可以通过这些示例学习