Java进程生成器

标签 java

我有一个项目,程序必须打开记事本文件,输入文本并保存记事本文件后,程序应显示该文件中的单词数,并且应删除文件中输入的内容。 运行程序后,我收到此错误 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/

相关文章:

java - Spring Data JPA - 如何以编程方式设置 JpaRepository 基础包

java - 将文本文件分成 block

java - 为什么 FilterInputStream 和 FilterOutputStream 在它们的构造函数中有不同的访问修饰符?

java - java 将 if-else 转换为 switch 语句

java - 将 JMenuBar 和 JPanel 添加到 JFrame

Java:根据模式提取数组列表的子列表

java - 无法添加maven远程目录

java - 具有模糊透明背景的 JFrame

java - Enum 中没有枚举 const 类

java - 如何在 Spring 配置中导入可选属性文件以进行生产?