1

我正在尝试将字符串打印到文件中。我做错了什么,它总是给我一个 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();


    }
}
4

6 回答 6

5

看来您在这里遇到了异常

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

这是因为你没有初始化

public String[] items;

在你的构造函数中初始化它是这样的

public StringPrinter(String fileName){
         file = new File(fileName);
         items = new String[SIZE];
}
于 2012-10-25T05:39:33.920 回答
3

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

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

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

于 2012-10-25T06:56:13.070 回答
2

您正在尝试设置字符串测试一!到数组的第一个位置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();
    }
}
于 2012-10-25T05:46:05.773 回答
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();


}

}

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

于 2012-10-25T06:00:01.873 回答
0

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

import java.io.*;

公共类 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();
}

}

于 2012-10-25T06:22:13.210 回答
0

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

于 2012-10-25T05:50:04.890 回答