public class CopyFilesUnit {
  public static void main(String[] args){
    String scrFile=args[0];
    String destFile=args[1];
   //fileCopy(scrFile,destFile);
  if(fileCopy(scrFile,destFile)){
      System.out.println("文件自制成功");
    }else{
      System.out.println("文件自制不成功");
    }
    
  }
 public  static boolean fileCopy(String scrScr,String destScr){
   File scrFile,destFile;
   FileInputStream in=null;
   FileOutputStream out=null;
   
   boolean flag=false;
   try{
      scrFile=new File(scrScr);
      destFile=new File(destScr);
      if(!destFile.exists()){
        destFile.createNewFile();
      }
      in=new FileInputStream(scrFile);
      out=new FileOutputStream(destFile);
      byte[] butf=new byte[1024];
      int len;
      String str=null;
      //StringBuffer str=new StringBuffer();
      while((len=in.read(butf))!=1){
      str=new  String(butf,0,len);
        
      }
      //String st=str.toString();
      byte[] buff=str.getBytes();
      out.write(buff);
      in.close();
      out.close();
      flag= true;
   }catch(IOException e){
     
   }
   return flag;
 }
}

解决方案 »

  1.   

    while((len=in.read(butf))!=1){//这里应该是(len=in.read(butf))!=-1
                str=new     String(butf,0,len);
                   
                } 
    你的文件结束符弄错了,把1改成-1就可以了
      

  2.   

                while((len=in.read(butf))!=1){ 
                str=new     String(butf,0,len); 
                }           
    改成
      while((len=in.read(butf))!=-1){ 
                str=new     String(butf,0,len); 
                    
                } 
      

  3.   

    给你一个我以前写的文件拷贝代码,很好用的(递归算法)
    import java.io.*;public class CopyAll { public void copyDir(File from, File to) {
    if (!to.exists()) {
    to.mkdirs();
    }
    File[] files = from.listFiles();
    for (int i = 0; i < files.length; i++) {
    File file1 = files[i];
    File file2 = new File(to.getPath() + File.separator
    + files[i].getName());
    if (!file1.isDirectory()) {
    copyFile(file1, file2);
    } else {
    copyDir(file1, file2);
    }
    } } public void copyFile(File src, File dest) {
    try {
    System.out.println(src.getAbsoluteFile() + " -> "
    + dest.getAbsoluteFile());
    FileInputStream in = new FileInputStream(src);
    FileOutputStream out = new FileOutputStream(dest);
    byte[] buffer = new byte[1024];
    while (in.read(buffer) != -1) {
    out.write(buffer);
    }
    out.close();
    in.close();
    System.out.println("文件拷贝成功");
    } catch (Exception e) {
    System.out.println("文件拷贝失败");
    } } public static void main(String[] args) {
    CopyAll t = new CopyAll();
    t.copyDir(new File(args[0]), new File(args[1])); }}
      

  4.   

      while((len=in.read(butf))!=1){
                str=new     String(butf,0,len);
                   
                } butf缓冲区的大小为1024个字节长度,如果你的文件长度大于1024怎么处理?
    所以我感觉你这块有问题,while((len=in.read(butf,0,1024))!=-1) {
      str = new String(butf);
      out.write(buff); 
    }你的butf是不是用作缓冲区啊?那为什么不用bufferedInputStream呢?BufferedInputStream in= new BufferedInputStream(new FileInputStream(new File(args[0])));