簡體   English   中英

Java Process Builder

[英]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.
}

一些進一步的評論:

您的其余代碼似乎也存在一些問題。

  • 您只閱讀該文件的一行。 如果用戶使用新線路怎么辦?
  • 異常處理不是很好,至少打印異常的堆棧跟蹤,這將為您提供有關異常發生位置的進一步提示
  • 如果您使用的是Java 7,請繼續嘗試使用資源 ; 如果您使用的是Java 6,請添加finally塊以確保您的資源(流)已關閉。

當你運行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM