下面的代码描述了Java的情况。我在getRuntime().exec
函数中使用了一些psudocode;但是,重点是创建一个新文件。
虽然第二行在第一次运行时导致错误,但我可以看到新文件已经创建。另外,我第二次运行它,它的工作原理;我的意思是说它第二次运行时,它可以读取上次运行时创建的文件。所以,我能想到的最好的是第二行需要等待直到创建新文件(~1,000行文本)。
Runtime.getRuntime().exec(new String[] {"Do something that writes a new file", "c:/"+newFileName+".xml"});
...
File fileToParse = new File("c:/"+newFileName+".xml");
答案 0 :(得分:4)
等待进程在Runtime.exec
返回的进程上使用waitFor
方法终止。否则,第二行代码在外部进程运行时执行,并且尚未创建文件。
答案 1 :(得分:1)
您可能希望使用新的fork/join方法进行并发。
答案 2 :(得分:1)
可以使用File.createNewFile()
方法在Java中本地创建文件。这更好,更清晰。
File fileThatShouldBeCreated = new File("C:\\" + newFileName + ".xml");
fileThatShouldBeCreated.createNewFile(); // Create it!
System.out.println(fileThatShouldBeCreated.exists()); // Check if it exists.
由于您告诉我们您使用的实用程序不是简单地创建文件而是向其写入数据,因此当然不会回答这个问题。
除了JB Nizet's answer之外,我想告诉我waitFor()
方法存在一些问题。它不想回来。我想这是因为我没有阅读过程的所有输出(stdout
)。别人怎么看待这件事?这是一个相关的结论吗?我只读了输出的前几行并调用了waitFor()
,但在这几行后仍然有很多其他的输出。
答案 3 :(得分:0)
如果您可以在Java 7下编写,那么您可以使用新的Path和WatchService功能。您将指向路径并观察它以在创建时通知您
Path path = new File("c:/"+newFileName+".xml").toPath()
WatchService watcher = FileSystems.getDefault().newWatchService();
path.register(watcher, ENTRY_CREATE);
WatchKey key = watcher.take();//will block here until the file is created