[新手提问]关于空引用异常 (昨天那个"io流复制文件贴"续)
-------------------
读文件输出到终端范例代码:
import java.io.*;
class readfile{
public static void main(String[] args)throws
IOException,
ArrayIndexOutOfBoundsException{
File f=new File(args[0]);
if(f.exists()){
FileReader Rfile=new FileReader(f);
BufferedReader r=new BufferedReader(Rfile);
String value=r.readLine();
while(true){
System.out.println(value);
if(value==null) break;
value=r.readLine();
}
Rfile.close();
}
}
}
-------------------
因为初学,所以想参照以上代码我打算写个复制文件的代码加深理解应用
以下代码是昨天初贴完全没修改的
后来求教csdn各位以后终于完成了目的
但是后来细细研究这个错误代码的时候,两个> > > > > > 输出语句中间抛出的空引用异常是怎么抛出的一直都不明白line是因为引用了R1.我在//read file1里面还有异常语句前用输出语句调试,输出的果然都是null 这是为什么啊?读文件部分明明是照示范代码写的.示范代码也调试过了,没错..
只关于此异常不探讨其他错误 求解!
------------------------------------------
初始代码:
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]);
//new file1
BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
FileWriter writef1=new FileWriter(f1);
BufferedWriter w1=new BufferedWriter(writef1);
//read file1
System.out.println(f1);
FileReader r1=new FileReader(f1);
BufferedReader R1=new BufferedReader(r1);
System.out.println(R1.readLine());
//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){
System.out.println(R1.readLine());
String line=R1.readLine();
System.out.println( "> > > > ");
line=line.toUpperCase();
System.out.println( "> > > > ");
if(line!=null){
break;
}else w2.write(line);
}
w2.flush();
w2.close();
w1.flush();
w1.close();
writef2.close();
writef1.close();
}catch(Array
IndexOutOfBoundsException e){
System.out.println( "没有输入参数,或参数不匹配 ");
}
}
}
----------------------------------------------------
------解决方案--------------------若f1存在,FileWriter writef1=new FileWriter(f1);会清空f1的内容,如果想以追加方式打开f1则需要这样:FileWriter writef1=new FileWriter(f1, true);。f1为空则R1.readLine();返回null
若f1不存在,在调用w1.flush();之前要写入的数据都保存在缓冲区中并没有真正写入文件,此时f1是个空文件,R1.readLine();返回null
------解决方案--------------------