请教高手:
怎么用FileReader和FileWriter实现文件的复制!能够举个实际的例子更好!

解决方案 »

  1.   

    这两个类一般只用于文本文件的复制....例子的话,网上很多,google一下喵~~~`
      

  2.   


            /**
     * 拷贝一个文件到另一个目录
     */
    public boolean copyFile(String from, String to) { File fromFile, toFile;
    fromFile = new File(from);
    toFile = new File(to);
    FileReader fis = null;
    FileWriter fos = null; try {
    toFile.createNewFile();
    fis = new FileReader(fromFile);
    fos = new FileWriter(toFile);
    int bytesRead;
    char[] buf = new char[4 * 1024]; // 4K buffer
    while ((bytesRead = fis.read(buf)) != -1) {
    fos.write(buf, 0, bytesRead);
    }
    fos.flush();
    fos.close();
    fis.close();
    } catch (IOException e) {
    System.out.println(e);
    return false;
    }
    return true; }
      

  3.   


    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.FileWriter;
    import java.io.InputStream;
    import java.io.PrintWriter;public  class  CopyFile  {  
       public  CopyFile()  {  
       }  
     
       /**  
         *  新建目录  
         *  @param  folderPath  String  如  c:/fqf  
         *  @return  boolean  
         */  
       public  void  newFolder(String  folderPath)  {  
           try  {  
               String  filePath  =  folderPath;  
               filePath  =  filePath.toString();  
               java.io.File  myFilePath  =  new  java.io.File(filePath);  
               if  (!myFilePath.exists())  {  
                   myFilePath.mkdir();  
               }  
           }  
           catch  (Exception  e)  {  
               System.out.println("新建目录操作出错");  
               e.printStackTrace();  
           }  
       }  
     
       /**  
         *  新建文件  
         *  @param  filePathAndName  String  文件路径及名称  如c:/fqf.txt  
         *  @param  fileContent  String  文件内容  
         *  @return  boolean  
         */  
       public  void  newFile(String  filePathAndName,  String  fileContent)  {  
     
           try  {  
               String  filePath  =  filePathAndName;  
               filePath  =  filePath.toString();  
               File  myFilePath  =  new  File(filePath);  
               if  (!myFilePath.exists())  {  
                   myFilePath.createNewFile();  
               }  
               FileWriter  resultFile  =  new  FileWriter(myFilePath);  
               PrintWriter  myFile  =  new  PrintWriter(resultFile);  
               String  strContent  =  fileContent;  
               myFile.println(strContent);  
               resultFile.close();  
     
           }  
           catch  (Exception  e)  {  
               System.out.println("新建文件操作出错");  
               e.printStackTrace();  
     
           }  
     
       }  
     
       /**  
         *  删除文件  
         *  @param  filePathAndName  String  文件路径及名称  如c:/fqf.txt  
         *  @param  fileContent  String  
         *  @return  boolean  
         */  
       public  void  delFile(String  filePathAndName)  {  
           try  {  
               String  filePath  =  filePathAndName;  
               filePath  =  filePath.toString();  
               java.io.File  myDelFile  =  new  java.io.File(filePath);  
               myDelFile.delete();  
     
           }  
           catch  (Exception  e)  {  
               System.out.println("删除文件操作出错");  
               e.printStackTrace();  
     
           }  
     
       }  
     
       /**  
         *  删除文件夹  
         *  @param  filePathAndName  String  文件夹路径及名称  如c:/fqf  
         *  @param  fileContent  String  
         *  @return  boolean  
         */  
       public  void  delFolder(String  folderPath)  {  
           try  {  
               delAllFile(folderPath);  //删除完里面所有内容  
               String  filePath  =  folderPath;  
               filePath  =  filePath.toString();  
               java.io.File  myFilePath  =  new  java.io.File(filePath);  
               myFilePath.delete();  //删除空文件夹  
     
           }  
           catch  (Exception  e)  {  
               System.out.println("删除文件夹操作出错");  
               e.printStackTrace();  
     
           }  
     
       }  
     
       /**  
         *  删除文件夹里面的所有文件  
         *  @param  path  String  文件夹路径  如  c:/fqf  
         */  
       public  void  delAllFile(String  path)  {  
           File  file  =  new  File(path);  
           if  (!file.exists())  {  
               return;  
           }  
           if  (!file.isDirectory())  {  
               return;  
           }  
           String[]  tempList  =  file.list();  
           File  temp  =  null;  
           for  (int  i  =  0;  i  <  tempList.length;  i++)  {  
               if  (path.endsWith(File.separator))  {  
                   temp  =  new  File(path  +  tempList[i]);  
               }  
               else  {  
                   temp  =  new  File(path  +  File.separator  +  tempList[i]);  
               }  
               if  (temp.isFile())  {  
                   temp.delete();  
               }  
               if  (temp.isDirectory())  {  
                   delAllFile(path+"/"+  tempList[i]);//先删除文件夹里面的文件  
                   delFolder(path+"/"+  tempList[i]);//再删除空文件夹  
               }  
           }  
       }  
      

  4.   

     
      /**  
         *  复制单个文件  
         *  @param  oldPath  String  原文件路径  如:c:/fqf.txt  
         *  @param  newPath  String  复制后路径  如:f:/fqf.txt  
         *  @return  boolean  
         */  
       public  void  copyFile(String  oldPath,  String  newPath)  {  
           try  {  
               int  bytesum  =  0;  
               int  byteread  =  0;  
               File  oldfile  =  new  File(oldPath);  
               if  (oldfile.exists())  {  //文件存在时  
                   InputStream  inStream  =  new  FileInputStream(oldPath);  //读入原文件  
                   FileOutputStream  fs  =  new  FileOutputStream(newPath);  
                   byte[]  buffer  =  new  byte[1444];  
                   int  length;  
                   while  (  (byteread  =  inStream.read(buffer))  !=  -1)  {  
                       bytesum  +=  byteread;  //字节数  文件大小  
                       System.out.println(bytesum);  
                       fs.write(buffer,  0,  byteread);  
                   }  
                   inStream.close();  
               }  
           }  
           catch  (Exception  e)  {  
               System.out.println("复制单个文件操作出错");  
               e.printStackTrace();  
     
           }  
     
       }  
     
       /**  
         *  复制整个文件夹内容  
         *  @param  oldPath  String  原文件路径  如:c:/fqf  
         *  @param  newPath  String  复制后路径  如:f:/fqf/ff  
         *  @return  boolean  
         */  
       public  void  copyFolder(String  oldPath,  String  newPath)  {  
     
           try  {  
               (new  File(newPath)).mkdirs();  //如果文件夹不存在  则建立新文件夹  
               File  a=new  File(oldPath);  
               String[]  file=a.list();  
               File  temp=null;  
               for  (int  i  =  0;  i  <  file.length;  i++)  {  
                   if(oldPath.endsWith(File.separator)){  
                       temp=new  File(oldPath+file[i]);  
                   }  
                   else{  
                       temp=new  File(oldPath+File.separator+file[i]);  
                   }  
     
                   if(temp.isFile()){  
                       FileInputStream  input  =  new  FileInputStream(temp);  
                       FileOutputStream  output  =  new  FileOutputStream(newPath  +  "/"  +  
                               (temp.getName()).toString());  
                       byte[]  b  =  new  byte[1024  *  5];  
                       int  len;  
                       while  (  (len  =  input.read(b))  !=  -1)  {  
                           output.write(b,  0,  len);  
                       }  
                       output.flush();  
                       output.close();  
                       input.close();  
                   }  
                   if(temp.isDirectory()){//如果是子文件夹  
                       copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i]);  
                   }  
               }  
           }  
           catch  (Exception  e)  {  
               System.out.println("复制整个文件夹内容操作出错");  
               e.printStackTrace();  
     
           }  
     
       }  
     
       /**  
         *  移动文件到指定目录  
         *  @param  oldPath  String  如:c:/fqf.txt  
         *  @param  newPath  String  如:d:/fqf.txt  
         */  
       public  void  moveFile(String  oldPath,  String  newPath)  {  
           copyFile(oldPath,  newPath);  
           delFile(oldPath);  
     
       }  
     
       /**  
         *  移动文件到指定目录  
         *  @param  oldPath  String  如:c:/fqf.txt  
         *  @param  newPath  String  如:d:/fqf.txt  
         */  
       public  void  moveFolder(String  oldPath,  String  newPath)  {  
           copyFolder(oldPath,  newPath);  
           delFolder(oldPath);  
     
       }  
       public static void main(String[] args) {
        CopyFile file = new CopyFile();
    //    file.newFolder("newFolder22222");
        file.newFile("test.txt","fdsfdsfdsfs");
       }
    // 拷贝文件
       private void copyFile2(String source, String dest) {
       try {
       File in = new File(source);
       File out = new File(dest);
       FileInputStream inFile = new FileInputStream(in);
       FileOutputStream outFile = new FileOutputStream(out);
       byte[] buffer = new byte[1024];
       int i = 0;
       while ((i = inFile.read(buffer)) != -1) {
       outFile.write(buffer, 0, i);
       }//end while
       inFile.close();
       outFile.close();
       }//end try
       catch (Exception e) {   }//end catch
       }//end copyFile}
      

  5.   

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.nio.channels.FileChannel;public class Test {
        
        public static void main(String[] args)  {
            copyFile("f:/a.txt", "f:/b.txt");        
        }
        
        public static void copyFile(String srcFile, String destFile) {
            FileInputStream is = null;
            FileOutputStream os = null;
            FileChannel fin = null;
            FileChannel fout = null;
            try {
                is = new FileInputStream(srcFile);
                os = new FileOutputStream(destFile);
                fin = is.getChannel();
                fout = os.getChannel();
                fin.transferTo(0, fin.size(), fout);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    fin.close();
                    fout.close();
                    is.close();
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }            
            }
        }
    }
      

  6.   

    package test.file;import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.PrintStream;
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;public class CopyFile {

    PrintStream ps = System.out; /**
     * @param args
     */
    public static void main(String[] args) {
    CopyFile cf = new CopyFile();
    try {
    cf.copy(System.getProperty("user.dir") 
    + "/src/test/file/co.txt",System.getProperty("user.dir") 
    + "/src/test/file/py.txt");

    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    } private void copy(String string, String string2) throws IOException {
    // open file
    // ps.println(System.getProperties());
    FileInputStream fi = new FileInputStream(string);
    FileOutputStream fo = new FileOutputStream(string2);

    // read file

    FileChannel fc = fi.getChannel();
    byte[] b = new byte[(int) fc.size()];
    ByteBuffer bf =  ByteBuffer.wrap(b);
    fc.read(bf);
    // write into destination file
    fo.write(bf.array());
    // close stream
    fi.close();
    }}
      

  7.   

    少写了一个close.package test.file;import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.PrintStream;
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;public class CopyFile {

    PrintStream ps = System.out; /**
     * @param args
     */
    public static void main(String[] args) {
    CopyFile cf = new CopyFile();
    try {
    cf.copy(System.getProperty("user.dir") 
    + "/src/test/file/co.txt",System.getProperty("user.dir") 
    + "/src/test/file/py.txt");

    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    } private void copy(String string, String string2) throws IOException {
    // open file
    // ps.println(System.getProperties());
    FileInputStream fi = new FileInputStream(string);
    FileOutputStream fo = new FileOutputStream(string2);

    // read file

    FileChannel fc = fi.getChannel();
    byte[] b = new byte[(int) fc.size()];
    ByteBuffer bf =  ByteBuffer.wrap(b);
    fc.read(bf);
    // write into destination file
    fo.write(bf.array());
    // close stream
    fi.close();
    fo.close();
    }}
      

  8.   

    大多数的语言都都不提供文件copy的功能,这点我感到很奇怪。但是确实如此。用流copy文件是Java的唯一办法了,Ruby还可以有File的扩展方法,C#很容易调用Win32 API.Java就只能JNI了流太慢了。