Java Process Builder
我有一个项目,程序必须打开记事本文件,在输入文本并保存该记事本文件后,程序应显示该文件中的字数,并应删除文件中输入的内容。 运行程序后,我收到此错误错误而不是derjava.lang.NullPointerException。 虽然在Mytext.txt中输入一些文本并保存之后? 我的问题是为什么BufferedReader正在读取空文件,即使我正在用一些内容保存文件。 谢谢你的帮助Java Process Builder,java,Java,我有一个项目,程序必须打开记事本文件,在输入文本并保存该记事本文件后,程序应显示该文件中的字数,并应删除文件中输入的内容。 运行程序后,我收到此错误错误而不是derjava.lang.NullPointerException。 虽然在Mytext.txt中输入一些文本并保存之后? 我的问题是为什么BufferedReader正在读取空文件,即使我正在用一些内容保存文件。 谢谢你的帮助 public class Notepad_Example { public static void ma
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);
}
}
}
公共类记事本\u示例{
公共静态void main(字符串[]jfb){
试一试{
ProcessBuilder proc=newProcessBuilder(“notepad.exe”、“C:\\Java Projects\\Reverse String\\src\\Mytext.txt”);
proc.start();
缓冲剂;
字符串s;
br=新的BufferedReader(新的文件阅读器(“C:\\Java项目\\反向字符串\\src\\Mytext.txt”);
s=br.readLine();
字符c[]=新字符[s.length()];
int j=0;
对于(int i=0;i
您遇到的问题是:
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.
}
String[] cmd = new String[]{"notepad.exe", "C:\\Java Projects\\Reverse String\\src\\Mytext.txt"};
new ProcessBuilder(cmd);
还有一些评论:
代码的其余部分似乎也有一些问题
- 您只读取该文件的一行。如果用户正在使用新行怎么办
- 异常处理不是很好,至少打印异常的堆栈跟踪,这将进一步提示发生异常的位置
- 如果您使用的是Java7,请继续阅读;如果您使用的是Java6,请添加finally块以确保您的资源(流)已关闭
proc.start()时代码>它不会阻塞并等待进程结束,它将继续运行
您需要调用proc.waitFor()
方法来阻止,直到完成为止。注意
我们在使用process builder时出现了一些奇怪的行为。。。
我们曾经用一个
new ProcessBuilder("notepad.exe", "C:\\Java Projects\\Reverse String\\src\\Mytext.txt");
但是我们升级到Win7和Java7时失败了-我们不确定这个问题真正起源于何处,但我们修改了如下代码:
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.
}
String[] cmd = new String[]{"notepad.exe", "C:\\Java Projects\\Reverse String\\src\\Mytext.txt"};
new ProcessBuilder(cmd);
从那时起,它的工作是正确的 你在什么地方误解了这个要求吗?这个要求中没有误解。非常感谢Matthias。终于成功了。。上面粘贴的代码是草稿。谢谢。很高兴听到这个消息。请记住,我们只能使用您提供的服务。剩下的我们必须猜测:)