创作背景:
我这段时间在研究别人代码,可老对屏幕对眼不好,也不能很集中地进行分析,就想把那些代码打印出来,刚开始的时候,看的程序代码少,也就一两个类文件,后来看的程序长了,动不动就是十来个类文件,那样在打印时为了省纸就得先把那些类文件一个一个地拷到另一个文件中,但文件一多,就容易出错,有时不是漏拷了文件就是某个文件多拷了几次,而且每次都得核对是否拷完。这样的核对太麻烦了,于是就想着自己编个实用程序,一来满足自己的需求,二来也练练手。于是就有了下面的这段程序。
肯定有好多不足的地方,希望大家多多给板砖。
package copyall;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
public class CopyAll {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
/*for(int i =0;i <listFileOfDir(args[0]).length();i++){
}*/
File ori = new File(args[0]);
File[] list = ori.listFiles();
File out = new File(args[1]);
for(int i=0;i <list.length;i++){
readAndWrite(list[i],out);
}
}
static void readAndWrite(File fileList,File fileout) throws Exception{
//define the file of original
//File fileIn = new File(fileList);
//这里有个疑问:在程序的执行的当前目录下,怎么来区分args[]是否为相对目录与绝对目录
FileReader fr = new FileReader(fileList);
BufferedReader bf = new BufferedReader(fr);
//在这好像可以直接应用args[]作为行参来调用FileReader吧???
FileWriter fw = new FileWriter(fileout,true);
BufferedWriter bw = new BufferedWriter(fw);
//在这好像可以用到PipedStream这么个类来把这两个Stream连接起来吧???
//String line;//好像不行的吧???那又该怎么办呢??先试试吧
char[] c = new char[1000];//看来不能太长了,那多长就合适了呢???
//现在的一个问题就是源文件一长,那个c就不够用,再有就是source文件就乱码!!!
//如何来改进呢?????
//可以动态地设置一个flag用来显示是否到达文件的尾部
//String line = null;
int tok;
while((tok=bf.read(c))!=-1){//怎么用了buffer后少了第一个文件了呢???
bw.write(c);//太好了,上面的那个true就可以把这个问题搞定!!!哈哈!!!!
//这样可能就覆盖了已读入的第一份文件吧???
//好像有个append方法,试试看
//fw.append(c.toString());//还是不对呀,怎么只打印出个序列号呢???
}
fr.close();
fw.close();//刚才没有调用这个close方法,是不是就造成了刚才那个In.txt文件中没有内容呢??
}
static File[] listFileOfDir(File dir){
//File [] list = new File[100];
return dir.listFiles();
}
}
我本来想多给分的,可现在就10分了,:(
------解决方案--------------------
不错
有实用价值