代码如下:
import java.io.*;
import java.util.*;public class FileCopy
{

public FileCopy(String s,String a)
{
File fs=new File(s);
File fa=new File(a);


/**
读入并拷贝数据
*/

try
{
BufferedInputStream fsIn = new BufferedInputStream(new FileInputStream(fs));

BufferedOutputStream faOut = new BufferedOutputStream(new FileOutputStream(fa));
//以下6行为有问题的代码,我不知道错在哪了?
int i=fsIn.read();
while(i!=-1)
{
faOut.write(i);
i=fsIn.read();
}

fsIn.close();
faOut.close();
}catch(IOException e)
{
System.out.println(e);
}

} public static void main(String[] args)
{
System.out.println("Start copy.....");

long l1=System.currentTimeMillis();
new FileCopy(args[0],args[1]);
long l2=System.currentTimeMillis();
System.out.println("Finished!");
System.out.println("Total Time:"+(l2-l1));
}
}args[0]为欲拷贝的文件,args[1]为拷贝文件。谢谢!

解决方案 »

  1.   

    这个,代码虽然写的不太好,但是不至于出错,我估计你是输入的参数错了.
    改成new FileCopy("c:/a.txt","c:/aaaa.txt");试试.注意分隔符"/"或者"\\"
      

  2.   

    确认不是分格符的问题,问题就出在代码中指出的那几行。替换为以下代码就正确了:
    int totalByte=fsIn.available();
    while(totalByte>=1)
    {
    faOut.write(fsIn.read());
    totalByte=fsIn.available();
    }
    可我不知道之前那么写为啥不对。
      

  3.   

    我在我这运行了一下,没问题.我还特意复制了一个14兆的rar文件,可以正常结束,而且复制出来的rar可以正确解压缩.你能把错误信息打印出来么?用e.printStackTrace()打印,贴出来。
    一般习惯
    while((i=fsIn.read())!=-1){
       faOut.write(i);
    }
      

  4.   

    给你个代码吧,很简单.
    这个用字符流复制文件
    import java.io.*;
    public class WriteFile{
    public static void main(String[] args){
    try{
    BufferedReader in=new BufferedReader(new FileReader(args[0]));
    PrintWriter out=new PrintWriter(args[1]);
    String s=in.readLine();
    while(s!=null)
    {
    out.println(s);
    s=in.readLine();
    }
    in.close();
    out.close();
    }catch(IOException e){
    System.out.println(e);
    }
    }
    }
    下面用字节流复制文件
    import java.io.*;
    public class CopyFile{
    /*public static void copyFile(DataInputStream in,DataOutputStream out) throws IOException{
    try{
    while(true)
    {
    out.writeByte(in.readByte());
    }
    }catch(EOFException eof){
    return;
    }
    }*/
    public static void main(String[] args){
    try{
    DataInputStream in=new DataInputStream(new BufferedInputStream(new FileInputStream(args[0])));
    DataOutputStream out=new DataOutputStream(new BufferedOutputStream(new FileOutputStream(args[1])));
    //copyFile(in,out);
    while(in.available()!=0)
    {
    out.writeByte(in.readByte());
    }
    in.close();
    out.close();
    }catch(IOException e){
    System.out.print(e);
    }
    }
    }
      

  5.   

    我现在运行它又没错了,我崩溃了,不过我换了台电脑,明天回去再看看,谢谢各位!我正在看java的io部分,再问个问题好了。下面这个:
    DataInputStream in=new DataInputStream(new BufferedInputStream(new FileInputStream(args[0])));
    现在使用in.read()方法,DataInputStream 类和BufferedInputStream类都有read()方法,应该是DataInputStream类的read()方法吧?可是为啥它具备缓冲的能力呢?经测试,BufferedInputStream的read()相比于FileInputStream的read()而言,并没有明显的性能提升。BufferedOutputStream倒是可以极其明显的改善输出性能。