Java,使用新创建的文本文件

Java,使用新创建的文本文件,java,file-io,Java,File Io,下面的代码描述了一种Java情况。我在getRuntime().exec函数中使用了一些psudocode;但是,主要的一点是创建了一个新文件 虽然第二行在第一次运行时会导致错误,但我可以看到新文件已经创建。而且,我第二次运行它时,它工作了;我的意思是说,第二次运行时,它可以读取上一次运行时创建的文件。所以,我能想到的最好的办法是,第二行需要等到新文件创建后(大约1000行文本) 您可能希望使用新的并发方法。您可能希望使用新的并发方法。等待进程使用Runtime.exec返回的进程上的方法终止。

下面的代码描述了一种Java情况。我在
getRuntime().exec
函数中使用了一些psudocode;但是,主要的一点是创建了一个新文件

虽然第二行在第一次运行时会导致错误,但我可以看到新文件已经创建。而且,我第二次运行它时,它工作了;我的意思是说,第二次运行时,它可以读取上一次运行时创建的文件。所以,我能想到的最好的办法是,第二行需要等到新文件创建后(大约1000行文本)


您可能希望使用新的并发方法。

您可能希望使用新的并发方法。

等待进程使用
Runtime.exec
返回的进程上的方法终止。否则,第二行代码将在外部进程正在运行且尚未创建文件时执行。

使用运行时.exec返回的进程方法等待进程终止。否则,第二行代码将在外部进程运行且尚未创建文件时执行。

创建文件可以使用该方法在Java中本机完成。这是更好更清楚的

File fileThatShouldBeCreated = new File("C:\\" + newFileName + ".xml");
fileThatShouldBeCreated.createNewFile(); // Create it!
System.out.println(fileThatShouldBeCreated.exists()); // Check if it exists.

既然您告诉我们您使用的实用程序不只是创建一个文件,还向其中写入数据,那么这当然不能回答问题


除此之外,我想告诉大家,我在使用
waitFor()
方法时遇到了一些问题。它不想再回来了。我想这是因为我没有读取进程的所有输出(通过
stdout
)。其他人对此有何看法?这是一个相关的结论吗?我刚刚读了输出的前几行并调用了
waitFor()
,但在这几行之后还有很多其他输出。

使用该方法可以在Java中以本机方式创建文件。这是更好更清楚的

File fileThatShouldBeCreated = new File("C:\\" + newFileName + ".xml");
fileThatShouldBeCreated.createNewFile(); // Create it!
System.out.println(fileThatShouldBeCreated.exists()); // Check if it exists.

既然您告诉我们您使用的实用程序不只是创建一个文件,还向其中写入数据,那么这当然不能回答问题


除此之外,我想告诉大家,我在使用
waitFor()
方法时遇到了一些问题。它不想再回来了。我想这是因为我没有读取进程的所有输出(通过
stdout
)。其他人对此有何看法?这是一个相关的结论吗?我刚刚读了输出的前几行,并调用了
waitFor()
,但在这几行之后还有很多其他输出。

如果您可以在Java 7下编写,那么您可以使用新的和新的功能。您可以指向路径并观察它,以便在创建路径时通知您

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

如果可以在Java7下编写,那么就可以使用新的和新的功能。您可以指向路径并观察它,以便在创建路径时通知您

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

为什么不使用
文件
在系统上创建文件?这样,当方法返回时,您就知道它已经完成了。如何:我正在使用一个名为Nmap的实用程序来创建文件。为什么不使用
file
在您的系统上创建文件呢?这样,当方法返回时,您就知道它已经完成了。如何:我正在使用一个名为Nmap的实用程序来创建文件。是的,您需要读取程序的输出。否则,它将挂起尝试写入更多内容,直到读取输出。@jbniset:当您甚至不调用
Process.getInputStream()
时,也需要这样做吗?是的。流存在,无论您是否得到它。读取是,您需要读取程序的输出。否则,它将挂起尝试写入更多内容,直到读取输出。@jbniset:当您甚至不调用
Process.getInputStream()
时,也需要这样做吗?是的。流存在,无论您是否得到它。阅读