2013-04-16 22 views
0

我在这个程序中遇到了异常。我试图做一些改变,但它仍然不起作用。我试图将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(); 
     } 
    } 
} 

显示java.lang.NullPointerException

在java.io.Writer.write(Writer.java:140)

在CopyFile.writeTextFile(CopyFile.java:37)

在CopyFile.main(CopyFile.java:21)

+4

唯一的例外也应该给你的地方抛出的行号,这将有助于你缩小问题。 – assylias

+0

并且您能在代码示例中直观地标记该行吗?真的帮助我们,如果你说,“我得到例外,它发生在以下行。”如果您发布了实际的异常输出,也会有所帮助。 – jefflunt

+0

存在空指针时会发生NullPointerException,它会告知行号。 –

回答

8

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

while((str=din.readLine())!=null) 
    System.out.println(str); 
    writeTextFile("/home/newlabuser/workspace/CopyFileDemo/src/demo1.txt",str); 
    din.close(); 

在这里,只有System.out.println(str)将在循环中运行,并在下一行将退出循环后执行,显然这里str的将是null。所以当你通过nullBufferedWriter'swrite()方法 - 你得到一个NullPointerException。修复你的代码:

while((str=din.readLine())!=null) { 
     System.out.println(str); 
     writeTextFile("/home/newlabuser/workspace/CopyFileDemo/src/demo1.txt",str); 
} 
din.close(); 

你应该没问题。

8

你不要蜘蛛缺少括号d你的while循环的主体。

因此,爪哇解析这样的:

while((str=din.readLine())!=null) { 
    System.out.println(str); 
} 

writeTextFile("/home/newlabuser/workspace/CopyFileDemo/src/demo1.txt",str); 
din.close(); 

因此,writeTextFile()线仅while循环后,当strnull运行饰面 –。


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

或者,切换到空白敏感的语言,如Python。

+0

更改它仍然是异常。 –

+0

你把它改成了什么? – SLaks

+0

改变它将关闭每个循环中的'DataInputStream din'! – Joetjah

0

试试这个:

File fdir = new File("/home/newlabuser/workspace/CopyFileDemo/src"); 
FileWriter file = new FileWriter(new File(fdir,"demo1.txt")); 
file.write(new Scanner(new File(fdir,"demo.txt")).useDelimiter("\\Z").next()); 
file.close(); 
0

此外,为了避免以后更多的麻烦:

您传递fileName到THR writeTextFile -methode,但从来没有使用它。 因此,而不是这样做的:

new FileWrite("/home/newlabuser/workspace/CopyFileDemo/src/demo1.txt");

你做前人的精力:

new FileWriter(fileName);

原来的问题已经被叶戈尔回答。

+0

非常感谢很多人的回应。它正在工作:) –

+0

你应该至少将这些答案中的一个作为你的问题的实际答案,以便这个答案得到“关闭”。 – Bluddymarri

0

那可就大错特错了这里发生了:

while((str=din.readLine())!=null) { 
    System.out.println(str); 
    writeTextFile("/home/newlabuser/workspace/CopyFileDemo/src/demo1.txt",str); 
    din.close(); 
} 

你在每个循环关闭din。也许它应该在循环之外。

那可就大错特错了这里发生了:

while((str=din.readLine())!=null) { 
    System.out.println(str); 
    writeTextFile("/home/newlabuser/workspace/CopyFileDemo/src/demo1.txt",str); 
} 
din.close(); 
相关问题