我在这个程序中得到了一个例外.我试图做一些改变,但它仍然无法正常工作.我试图将数据从demo.txt写入demo1.txt,但它给出了一个NullPointerException.我在这做错了什么?
import java.io.*;
class CopyFile{
public static void main(String[] args){
String str = null ;
try {
File f = new File("/home/newlabuser/workspace/CopyFileDemo/src/demo.txt");
if(f.exists())
{
if(f.canRead())
{
FileInputStream fin = new FileInputStream(f);
BufferedInputStream bin = new BufferedInputStream(fin);
DataInputStream din = new DataInputStream(bin);
while((str=din.readLine())!=null)
System.out.println(str);
writeTextFile("/home/newlabuser/workspace/CopyFileDemo/src/demo1.txt",str);
din.close();
}
}
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void writeTextFile(String fileName, String s) {
FileWriter output;
try {
output = new FileWriter("/home/newlabuser/workspace/CopyFileDemo/src/demo1.txt");
BufferedWriter writer = new BufferedWriter(output);
writer.write(s);
writer.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
显示java.lang.NullPointerException
在java.io.Writer.write(Writer.java:140)
在CopyFile.writeTextFile(CopyFile.java:37)
在CopyFile.main(CopyFile.java:21)
你在while循环体周围缺少括号.
因此,Java会像这样解析它:
while((str=din.readLine())!=null) {
System.out.println(str);
}
writeTextFile("/home/newlabuser/workspace/CopyFileDemo/src/demo1.txt",str);
din.close();
Run Code Online (Sandbox Code Playgroud)
因此,该writeTextFile()行只在后运行while循环结束的时候- str是null.
道德是总是正确地缩进你的代码.
使用IDE自动格式化代码,这种问题会更加明显.
或者,切换到对空格敏感的语言,例如Python.
不要低估使用带花环的花括号.这是你的代码:
while((str=din.readLine())!=null)
System.out.println(str);
writeTextFile("/home/newlabuser/workspace/CopyFileDemo/src/demo1.txt",str);
din.close();
Run Code Online (Sandbox Code Playgroud)
这里,只会System.out.println(str)在循环中运行,下一行将在循环退出后执行,显然str将在这里null.所以当你传递null给BufferedWriter's write()方法时 - 你会得到一个NullPointerException.修复您的代码:
while((str=din.readLine())!=null) {
System.out.println(str);
writeTextFile("/home/newlabuser/workspace/CopyFileDemo/src/demo1.txt",str);
}
din.close();
Run Code Online (Sandbox Code Playgroud)
你应该没事