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