我在这个程序中遇到异常?

Shr*_*ade 0 java

我在这个程序中得到了一个例外.我试图做一些改变,但它仍然无法正常工作.我试图将数据从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)

SLa*_*aks 8

你在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循环结束的时候- strnull.


道德是总是正确地缩进你的代码.
使用IDE自动格式化代码,这种问题会更加明显.

或者,切换到对空格敏感的语言,例如Python.


Ego*_*gor 8

不要低估使用带花环的花括号.这是你的代码:

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.所以当你传递nullBufferedWriter'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)

你应该没事