NullPointerException写入文件的程序出错

时间:2012-10-25 05:35:17

标签: java error-handling

我正在尝试将字符串打印到文件中。我做错了什么,它总是给我一个NullPointException?我相信我的异常会抓住某些东西或需要参数,我不会输入它。但在哪里?

我已编写此代码,其中包含主要功能。

编辑:在底部some.items[0]="Testing One!";的第二行中收到错误。

import java.io.*;



public class StringPrinter {
            public String[] items;
            public File file;
            public StringPrinter(String fileName){
                    file = new File(fileName);}


            public void toFile(){
                    try{
                        PrintWriter pw = new PrintWriter(new FileWriter(file, false));
                            for (String st:items){ 
                                    pw.println(st);
                            }
                    }
                    catch(Exception exception){}
            }



    public static void main(String args[]){

        StringPrinter some=new StringPrinter("Workyou.txt");




        some.items[0]="Testing One!";
        some.items[1]="Testing Two!";

        some.toFile();


    }
}

6 个答案:

答案 0 :(得分:5)

看来你在这里得到了例外

some.items[0]="Testing One!";

这是因为你没有初始化

public String[] items;

在构造函数

中初始化类似的东西
public StringPrinter(String fileName){
         file = new File(fileName);
         items = new String[SIZE];
}

答案 1 :(得分:3)

首先:正如所有人所说,你必须初始化数组。 第二:为什么不打印数据到文件 方案: 方法ToFile() 在for循环打印string []值后,您需要关闭Printer Writer

               PrintWriter pw = new PrintWriter(new FileWriter(file, false));
               for (String st:items){ 
                          pw.println(st);
               }
               **pw.close()**

它会将您的数据打印到文件中。

答案 2 :(得分:2)

您正在尝试将字符串 Testing One!设置为数组items的第一个位置,但您没有初始化该字符串数组

some.items[0]="Testing One!";

如果您更改此行。

public String[] items;

到这个

public String[] items = new String[2];
然后它会起作用。请注意,您必须预定义数组的大小。请注意,数组大小是固定的。如果您不希望修复数组大小,建议您使用wrapper class ArrayList,可以扩展其大小。

import java.io.*;
import java.util.ArrayList;

public class StringPrinter {

    public ArrayList<String> items = new ArrayList<String>();
    public File file;

    public StringPrinter(String filename) {
        file = new File(filename);
    }

    public void toFile() {
        try {
            PrintWriter pw = new PrintWriter(new FileWriter(file, false));
            for (String st : items) { 
                pw.println(st);
            }
            pw.close();
        }
        catch(Exception exception) { }
    }

    public static void main(String args[]) {
        StringPrinter some = new StringPrinter("Workyou.txt");
        some.items.add("Testing One!");
        some.items.add("Testing Two!");
        some.toFile();
    }
}

答案 3 :(得分:0)

items数组未初始化。在实际分配一些值之前,您必须初始化它。如果您不想创建固定大小的经典数组,那么您可以尝试使用ArrayList。

答案 4 :(得分:0)

试试这个,这应该在文件中打印文本

public class StringPrinter {
        public String[] items = new String [2];
        public File file;
        public StringPrinter(String fileName){
                file = new File(fileName);}


        public void toFile(){
                try{
                    PrintWriter pw = new PrintWriter(new FileWriter(file, false));
                    for (String st:items){ 
                        pw.print(st);
                         pw.flush();

                      }

                }
                catch(Exception exception){}
        }



public static void main(String args[]){

    StringPrinter some=new StringPrinter("Workyou.txt");

    some.items[0]="Testing One!";
    some.items[1]="Testing Two!";

    some.toFile();


}

}

Documentation for flush。不需要强制关闭编写器以查看文件中的内容,只需向编写器调用flush即可将内容添加到文件中。

答案 5 :(得分:0)

试试这个,完整解决的代码:

import java.io.*;

public class StringPrinter {

 public String[] items;
public File file;

public StringPrinter(String filename) {
    file = new File(filename);
}

public void toFile() {
    try {
        PrintWriter pw = new PrintWriter(new FileWriter(file, false));
        for (String st : items){ 
            pw.println(st);
        }
pw.close();       //needed to close the writer stream to write data in file
    }
    catch(Exception exception) {}
}

public static void main(String args[]) {
    StringPrinter some = new StringPrinter("Workyou.txt");
some.items = new String[2];        //needed to initialize array with size
    some.items[0]="Testing One!";
    some.items[1]="Testing Two!";
    some.toFile();
}

}