[英]Java Process Builder
我有一個項目,程序必須打開記事本文件,輸入文本后保存記事本文件程序應顯示該文件中的單詞數,並應刪除文件中輸入的內容。 我得到這個錯誤運行程序后錯誤不是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.
}
一些進一步的評論:
您的其余代碼似乎也存在一些問題。
當你運行proc.start();
它不會阻止並等待進程結束,它將繼續運行。
您將需要調用proc.waitFor()
方法,直到它完成為止。
注意
我們在使用流程構建器時遇到了一些奇怪的行為......我們過去常常使用a來啟動流程
new ProcessBuilder("notepad.exe", "C:\\Java Projects\\Reverse String\\src\\Mytext.txt");
但是我們升級到Win7和Java7時開始失敗了 - 我們不確定這個問題究竟來自哪里,但我們更改了代碼如下:
String[] cmd = new String[]{"notepad.exe", "C:\\Java Projects\\Reverse String\\src\\Mytext.txt"};
new ProcessBuilder(cmd);
從那以后它的工作正確!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.