我有一个项目,程序必须打开记事本文件,输入文本并保存记事本文件后,程序应显示该文件中的单词数,并且应删除文件中输入的内容。 运行程序后,我收到此错误 Error not derjava.lang.NullPointerException 。 但是在 Mytext.txt 中输入一些文本并保存后呢? 我的问题是为什么 BufferedReader 正在读取空文件,即使我正在保存包含某些内容的文件。 感谢您的帮助..
public class Notepad_Example {
public static void main(String[] jfb) {
try {
ProcessBuilder proc = new ProcessBuilder("notepad.exe", "C:\\Java Projects\\Reverse String\\src\\Mytext.txt");
proc.start();
BufferedReader br;
String s;
br = new BufferedReader(new FileReader("C:\\Java Projects\\Reverse String\\src\\Mytext.txt"));
s = br.readLine();
char c[] = new char[s.length()];
int j = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != ' ') {
c[i] = s.charAt(i);
} else {
j++;
}
}
System.out.println("number of words are " + (j + 1));
br.close();
} catch (Exception hj) {
System.out.println("Error not der" + hj);
}
try {
FileWriter fw = new FileWriter("C:\\Java Projects\\Reverse String\\src\\Mytext.txt");
fw.close();
} catch (Exception hj) {
System.out.println("Error not der" + hj);
}
}
}
最佳答案
您遇到的问题在这里:
ProcessBuilder proc=new ProcessBuilder("notepad.exe","C:\\Java Projects\\Reverse String\\src\\Mytext.txt");
proc.start();
proc.start()
返回新启动的进程。您必须让用户有机会编辑和保存文件并关闭编辑器,然后才能读取该文件。也就是说,您必须等待该过程完成才能开始使用该过程的结果(保存的文件)。
所以做这样的事情:
Process process = proc.start();
int result = process.waitFor();
if (result == 0) {
// Do your rest here
} else {
// give error message as the process did not finish without error.
}
一些进一步的评论:
您的其余代码似乎也存在一些问题。
- 您仅读取该文件的一行。如果用户使用新行怎么办?
- 异常处理不是很好,至少打印异常的堆栈跟踪,这将为您提供有关异常发生位置的进一步提示
- 如果您使用的是 Java 7,请阅读 try with resources ;如果您使用的是 Java 6,请添加finally block 以确保您的资源(流)被关闭。
关于Java进程生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20676981/