刚学到io包,想写个程序复制文件,通过命令参数行传两个参数,第一个参数是文件名1(f1),第二个是文件名2(f2);然后判断f1是不是存在,如果不存在就新建文件1然后输入内容,输入完以后读取写入文件2;如果文件1存在就直接读出然后写入文件2,调试以后发现输什么都输出文件1存在,并也建立命令行输入的文件1和文件2,所以认为表达式判断错了,所以用file f测试输出的全部是false.这下我蒙了..还有每次都会提示NullPointException空引用的异常,不知道这是为什么,程序如下:import java.io.*;public class filetest{
public static void main(String[] args) throws IOException{

try{
File f1=new File(args[0]);
File f2=new File(args[1]);
//这里是测试:输出的居然都是false
File f=new File("/file1/");
System.out.println("Name:"+f.getName());
System.out.println("/file1存在:"+f.exists());
System.out.println("File?:"+f.isFile());
System.out.println("path?:"+f.isDirectory());

//new file1 
BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
FileWriter writef1=new FileWriter(f1);
BufferedWriter w1=new BufferedWriter(writef1);

//read file1
FileReader r1=new FileReader(f1);
BufferedReader R1=new BufferedReader(r1);

//write file2
FileWriter writef2=new FileWriter(f2);
BufferedWriter w2=new BufferedWriter(writef2);

//这里f1.exists()的值也是1
if(!f1.exists()) {
f1.createNewFile();
System.out.println("文件"+args[0]+"不存在!新建..\n请输入文件内容:\n");

while(true){
System.out.print(">");
String line =stdin.readLine();
if(line!=null&&line.equals("quit")){
break;
}else w1.write(line);
 }

}else{
System.out.println("文件 "+args[0]+" 已存在,复制到文件 "+args[1]+" 中.. ");
}
f2.createNewFile();
while(true){
String line=R1.readLine();
line=line.toUpperCase();
if(line!=null){
break;
}else w2.write(line);
}

w2.flush();
w2.close();
w1.flush();
w1.close();
writef2.close();
writef1.close();

 }catch(ArrayIndexOutOfBoundsException e){
 System.out.println("没有输入参数,或参数不匹配");
 }
}
}

解决方案 »

  1.   

    FileWriter writef1=new FileWriter(f1);
    ===========
    如果f1不存在,则创建
      

  2.   

    //错的地方挺多,给你改了一下,自己对照着看看吧import java.io.*;public class filetest{
    public static void main(String[] args) throws IOException{
    FileWriter writef1 = null;
    BufferedWriter w1 = null;
    //read file1
    FileReader r1 = null;
    BufferedReader R1 = null;
    try{
    File f1=new File(args[0]);
    File f2=new File(args[1]);
    //这里是测试:输出的居然都是false
    File f=new File("/file1/");
    System.out.println("Name:"+f.getName());
    System.out.println("/file1存在:"+f.exists());
    System.out.println("File?:"+f.isFile());
    System.out.println("path?:"+f.isDirectory());//new file1 
    BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));//write file2
    FileWriter writef2=new FileWriter(f2);
    BufferedWriter w2=new BufferedWriter(writef2);//这里f1.exists()的值也是1
    if(!f1.exists()) {
    writef1=new FileWriter(f1);
    w1=new BufferedWriter(writef1);
    f1.createNewFile();
    System.out.println("文件"+args[0]+"不存在!新建..\n请输入文件内容:\n");while(true){
    System.out.print(">");
    String line =stdin.readLine();
    if(line!=null&&line.equals("quit")){
    break;
    }else w1.write(line);
    }
    w1.flush();
    }else{
    r1=new FileReader(f1);
    R1=new BufferedReader(r1);
    System.out.println("文件 "+args[0]+" 已存在,复制到文件 "+args[1]+" 中.. ");
    }
    r1=new FileReader(f1);
    R1=new BufferedReader(r1);
    f2.createNewFile();
    while(true){
    String line=R1.readLine();
    if(line==null){
    break;
    }else {
    line=line.toUpperCase();
    w2.write(line);
    }
    }
    w2.flush();
    w2.close();
    w1.close();
    writef2.close();
    writef1.close();}catch(ArrayIndexOutOfBoundsException e){
    System.out.println("没有输入参数,或参数不匹配");
    }
    }
    }
      

  3.   

    非常谢谢啊..不过如果文件一存在还是会抛出那个NullPointException异常.这是为什么喔?一直不明白..
      

  4.   

    还有,请问
    w1.flush();
    后面的
    r1=new FileReader(f1);
    R1=new BufferedReader(r1);
    和后面那个
    r1=new FileReader(f1);
    R1=new BufferedReader(r1);
    是不是重复多余的?是不是编辑时候不小心弄的?
      

  5.   

    w1.close();
    writef1.close();
    =============
    上面那两句放到w1.flush()后面就不会有NullPointException异常了那个是重复的
      

  6.   

    喔,果然啊..不过可以告诉我为什么吗?
    空引用的异常  close方法抛出的?怎么看API没有说?
    还有你前面改的程序
    先建引用
    都是因为:
    _ _ _ _ _ _ _
    FileWriter writef1=new FileWriter(f1);
    ===========
    如果f1不存在,则创建
    - - - - - - -
    这个吗?我刚学,什么疑问都想尽可能的明白
    不然心里挺郁闷的,希望不要嫌烦
      

  7.   

    writef1=new FileWriter(f1);
    w1=new BufferedWriter(writef1);是因为这两个对象的生命周期吗?
    在if的{}里面也会?高手现身..传道授业解惑吧.
      

  8.   

    1.当f1存在时,没有创建对象,w1,writef1都是null,所以调用close()方法的时候会抛出空指针异常。2.是的