黑马程序员:java文件复制问题
2012-06-03 10:39
218 查看
---------------------- android培训、java培训、期待与您交流! ----------------------
由于cpu跟内存交换数据比直接跟外设(即硬盘)交换数据效率会更高,所以要保证高效率,必须在缓冲区(即在内存开辟一块区域)里交换数据。即先将数据读到缓冲区中,然后在缓冲区中读取数据,这样文件复制速度会更快。
开始不能复制大容量文件后来经过修改,可以实现了。一开始直接用bis.available();的大小来设置byte数组的容量,由于java虚拟机的heap只支持64M以下的容量,复制超过64M的大文件时就会报错,即堆栈溢出。所以复制文件得换一种方式,即byte数组设置成指定的大小,然后通过循环逐块的读出和写出。
import java.io.*;
//文件复制操作
public class CopyFile {
public static void main(String[] args) throws Exception {
File f = new File("E:\\move\\新龙门客栈_BD.rmvb"); // 原始文件
if (f.isFile() == true) {
long t = System.currentTimeMillis();
BufferedInputStream bis = new BufferedInputStream( new FileInputStream(f));
System.out.println("文件大小(byte):" + bis.available());
byte[] buf = new byte[1024];
File f2 = new File("E:\\ordrd.txt"); // 复制后的文件
BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(f2));
int i;
while ((i = bis.read(buf)) != -1) {
bos.flush();// 强制写出
bos.write(buf, 0, i);
}
System.out.println("复制时间(ms):" + (System.currentTimeMillis() - t));
bis.close();
bos.close();
} else {
System.out.println("这不是个文件!");
}
}
}
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
由于cpu跟内存交换数据比直接跟外设(即硬盘)交换数据效率会更高,所以要保证高效率,必须在缓冲区(即在内存开辟一块区域)里交换数据。即先将数据读到缓冲区中,然后在缓冲区中读取数据,这样文件复制速度会更快。
开始不能复制大容量文件后来经过修改,可以实现了。一开始直接用bis.available();的大小来设置byte数组的容量,由于java虚拟机的heap只支持64M以下的容量,复制超过64M的大文件时就会报错,即堆栈溢出。所以复制文件得换一种方式,即byte数组设置成指定的大小,然后通过循环逐块的读出和写出。
import java.io.*;
//文件复制操作
public class CopyFile {
public static void main(String[] args) throws Exception {
File f = new File("E:\\move\\新龙门客栈_BD.rmvb"); // 原始文件
if (f.isFile() == true) {
long t = System.currentTimeMillis();
BufferedInputStream bis = new BufferedInputStream( new FileInputStream(f));
System.out.println("文件大小(byte):" + bis.available());
byte[] buf = new byte[1024];
File f2 = new File("E:\\ordrd.txt"); // 复制后的文件
BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(f2));
int i;
while ((i = bis.read(buf)) != -1) {
bos.flush();// 强制写出
bos.write(buf, 0, i);
}
System.out.println("复制时间(ms):" + (System.currentTimeMillis() - t));
bis.close();
bos.close();
} else {
System.out.println("这不是个文件!");
}
}
}
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
相关文章推荐
- 黑马程序员——java基础之文件复制
- 黑马程序员 编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad。
- java复制文件时遇到的问题
- 黑马程序员------演示MP3和图片以及.java文件的复制
- 黑马程序员_java对BufferedReader中readLine在拷贝文件时存在的问题的与改进方法。
- 黑马程序员-----java文件的复制操作合集
- 黑马程序员-Java文件复制代码
- 黑马程序员——JAVA基础---文件的复制效果--带异常处理
- 关于IO流在复制文件时出现java.io.FileNotFoundException: D:\xxx (拒绝访问。) 拒绝访问的问题
- Java IO 之 FileReader FileWriter 实现字符文件的复制(处理FileWriter新建文件失败的问题)
- 黑马程序员_.java文件的复制与改名
- 黑马程序员-JAVA学习之文件夹的复制和遍历所有文件
- 黑马程序员——java-使用IO流复制文件主要的五种方法
- java io 复制文件与 nio 复制文件的效率问题
- 黑马程序员_java初操作使用FileReader及FileWriter进行文件复制
- java中对文件的一些操作(删除,复制,计算大小..)和一些数学问题代码详解
- 黑马程序员_java用java进行复制文件(考虑使用多线程),能系统自带快吗??
- 黑马程序员——java基础之文件复制
- 解决 java.lang.ClassNotFoundException配置文件出错的问题
- 使用java连接Fastdfs,上传文件时报:SocketTimeOutException的问题.