public class FileStreamDemo {
public static void main(String[] args) {
try {
byte[] buffer = new byte[1024];// 来源文件
FileInputStream fileInputStream =
new FileInputStream(new File(args[0]));
// 目的文件
FileOutputStream fileOutputStream =
new FileOutputStream(new File(args[1]));// available()可取得未读取的数据长度
System.out.println("复制文件:" +
fileInputStream.available() + "字节");
/*这个循环不明白什么意思 ! 程序既然想用
buffer数组做缓冲区 为什么当源文件少于1024字节的时候
程序选择一个一个的读到目的文件中
if(fileInputStream.available() < 1024) {
// 剩余的数据比1024字节少
// 一位一位读出再写入目的文件int remain = -1;
while((remain = fileInputStream.read())
!= -1) {
fileOutputStream.write(remain);
} 如果用buffer一次性读入
不是好些么而当源文件大于1024字节的时候却又是用buffer来一
次性读入!这不是不能完全把复制么! 这是书上的列子 我看了
好久都不明白 请高手指点下,最好把这个循环没行语句的意思都做注解!
我想的是不用*/
while(true) {
if(fileInputStream.available() < 1024) {
// 剩余的数据比1024字节少
// 一位一位读出再写入目的文件int remain = -1;
while((remain = fileInputStream.read())
!= -1) {
fileOutputStream.write(remain);
}
break;
}
else {
// 从来源文件读取数据至缓冲区
fileInputStream.read(buffer);
// 将数组数据写入目的文件
fileOutputStream.write(buffer);
}
}// 关闭流
fileInputStream.close();
fileOutputStream.close();System.out.println("复制完成");
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println(
"using: java FileStreamDemo src des");
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
}
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【yangyongjie81】截止到2008-06-24 16:46:55的历史汇总数据(不包括此帖):
    发帖数:1                  发帖分:20                 
    结贴数:1                  结贴分:20                 
    未结数:0                  未结分:0                  
    结贴率:100.00%            结分率:100.00%            
    敬礼!
      

  2.   

    疑问1、为啥不一次读入,
    buffer多长算合适呢?多次读多次写和一次读写的最大区别在哪儿呢?
    很好,如果buffer开的很大,内存消耗必然增加
    那么,我们有时候会比较随意的直接选择诸如1024或者65535作为buffer的大小了。疑问2、为啥会一个一个读
    既然怀疑,为啥不自己直接改呢?while循环中的内容被我改了,楼主参考吧。 while (true) {
    int len = fileInputStream.available();
    if (len < 1024) {
    //少于1024时,写入的内容从0到长度处
    fileInputStream.read(buffer);
    fileOutputStream.write(buffer, 0, len);
    break;
    } else {
    // 从来源文件读取数据至缓冲区
    fileInputStream.read(buffer);
    // 将数组数据写入目的文件
    fileOutputStream.write(buffer);
    }
    }