黑马程序员技术交流社区

标题: 复制文件 [打印本页]

作者: 尹善波    时间: 2012-8-6 02:18
标题: 复制文件

//复制一个文件夹里的java文件到另一个文件夹,费了好大事,还是出现这个问题,求高人解决
import java.io.*;
import java.util.*;
class  JavaFileList1
{
public static void main(String[] args) throws IOException
{  
  File dir = new File("d:\\java");
//   File dir1 = new File("d:\\jdg");
  fileToList(dir);
}
public static void fileToList(File dir)throws IOException
{
  File[] files = dir.listFiles();
      
  for(File file : files)
  {
     String str=file.getName();//获取文件名称
        
   if(!file.isDirectory()&&file.getName().endsWith(".java"))//文件不是路径而且".java"结尾为真
   {
       writeToFile(file,str);//传递文件和文件名
   }               
    }
}  
public static void writeToFile(File file,String str)throws IOException
{
   
  File dir1 = new File("d:\\jad");
  BufferedReader bufr = null;
  BufferedWriter bufw = null;
       String[] s=str.split(".java");//以“.java”为符号切割赋给数组s
    System.out.println(s[0]);//s[0]为不带后缀名的文件名称
         
  try
  {
   bufr = new BufferedReader(new FileReader(file));  
   bufw = new BufferedWriter(new FileWriter( "d:\\jdg\\"+s[0]+".txt"));//这里编译的时候没问题,但是一输出就出现异常
                                                                                                     //
   String line = null;
   while((line=bufr.readLine())!=null)
   {
    bufw.write(line);
    bufw.newLine();
    bufw.flush();
   }
  }
  catch (IOException e)
  {
   throw e;
  }
  finally
  {
   try
   {
    if(bufw!=null)
     bufw.close();
   }
   catch (IOException e)
   {
    throw e;
   }
  }
}
}
作者: 樊占江    时间: 2012-8-6 02:23
仔细看这句: "d:\\jdg\\"+s[0]+".txt"));
作者: 瞿乐    时间: 2012-8-6 02:51
public static void writeToFile(File file,String str)throws IOException
        {
                File dir1 = new File("e:\\jad");
                //**1:***********如果文件不存在,则创建文件夹**************//
                if(!dir1.exists()){
                        dir1.mkdirs();
                }
                //*************以上三行是我加上去的**********************
                BufferedReader bufr = null;
                BufferedWriter bufw = null;
                //***:2:******************以下两行注释掉了不需要那么麻烦***************
                //***String[] s=str.split(".java");//以“.java”为符号切割赋给数组s
                //***System.out.println(s[0]);//s[0]为不带后缀名的文件名称
         
                try
                {
                        bufr = new BufferedReader(new FileReader(file));  
//        **                bufw = new BufferedWriter(new FileWriter( "d:\\jdg\\"+s[0]+".txt"));//这里编译的时候没问题,但是一输出就出现异常
                //3:上面改了改了一下,路径问题,改成下面的就没有错误了。
                        //如果 d:\\jdg\不存在,会出现异常。  
                        bufw = new BufferedWriter(new FileWriter( new File("e:/jad/"+str)));
                                                                                    
这是我在原来基础上,该了三个地方,有标注的,楼主可以看一下。 其余代码则是是原封不动的。
其实找楼主这么写,感觉不太好,只能拷贝一个文件夹下的.java文件,如果目录下有目录,其中还有.java文件就不能拷贝了
要递归。还有就是感觉楼主写的代码思路不清晰,如果多写两次,相信一定会写得很好的。
作者: 王程    时间: 2012-8-6 08:05
从错误提示来看,问题应该是File dir1 = new File("d:\\jad"),中的d:\\jad这个目录不存在造成的,所以要加上一句判断语句,如果这个目录不存在,就创建一个。

作者: hello world    时间: 2012-8-6 08:58
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileCopy {
        public static void main(String[] args) throws IOException {
                //生成输入文件的输入流对象
                FileInputStream fin = new FileInputStream("d:/test/a.txt");
                //生成输出文件的输出流对象
                FileOutputStream fout = new FileOutputStream("d:/test/b.txt");
                byte[] buff = new byte[256]; //定义一个永固暂存数据的byte数组
                int len = 0; //每次读取数据的长度
                //循环读取到buff中,如果文件到底,则读取数据的长度小于0
                while ((len = fin.read(buff)) > 0) {
                        fout.write(buff, 0, len); //把数据一次写进输出文件中
                }
                fin.close(); //关闭输入流
                fout.close(); //关闭输出流
        }
}
供参考,写代码要思路清晰,还有就是写文件分隔符是可以写成/这个,就不用转义了或者调用文件分割符那个属性。
作者: 尹善波    时间: 2012-8-6 14:28
已解决,谢谢大家了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2