刚学到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("没有输入参数,或参数不匹配");
}
}
}
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("没有输入参数,或参数不匹配");
}
}
}
===========
如果f1不存在,则创建
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("没有输入参数,或参数不匹配");
}
}
}
w1.flush();
后面的
r1=new FileReader(f1);
R1=new BufferedReader(r1);
和后面那个
r1=new FileReader(f1);
R1=new BufferedReader(r1);
是不是重复多余的?是不是编辑时候不小心弄的?
writef1.close();
=============
上面那两句放到w1.flush()后面就不会有NullPointException异常了那个是重复的
空引用的异常 close方法抛出的?怎么看API没有说?
还有你前面改的程序
先建引用
都是因为:
_ _ _ _ _ _ _
FileWriter writef1=new FileWriter(f1);
===========
如果f1不存在,则创建
- - - - - - -
这个吗?我刚学,什么疑问都想尽可能的明白
不然心里挺郁闷的,希望不要嫌烦
w1=new BufferedWriter(writef1);是因为这两个对象的生命周期吗?
在if的{}里面也会?高手现身..传道授业解惑吧.