在使用运行进程的同时检测文件是否存在时出现问题。更准确。我在互联网上找到了这些代码:
import java.io.InputStream;
import java.io.OutputStream;
public class SyncPipe implements Runnable {
public SyncPipe(InputStream istrm, OutputStream ostrm) {
istrm_ = istrm;
ostrm_ = ostrm;
}
public void run() {
try {
final byte[] buffer = new byte[1024];
for (int length = 0;
(length = istrm_.read(buffer)) != -1;) {
ostrm_.write(buffer, 0, length);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private final OutputStream ostrm_;
private final InputStream istrm_;
}
而且:
String[] command = {
"cmd"
};
Process p;
try {
p = Runtime.getRuntime().exec(command);
new Thread(new SyncPipe(p.getErrorStream(), System.err)).start();
new Thread(new SyncPipe(p.getInputStream(), System.out)).start();
PrintWriter stdin = new PrintWriter(p.getOutputStream());
帮助我运行命令提示符并使用其命令。到目前为止,工作得很好。我使用wget命令连接到服务器,使用用户名和密码下载使用7za命令提取的文件。这两个命令都在cmd中。我每天骑自行车一个月,看看是否有新的文件更新。我想要做的是建立文件以停止for循环并继续执行程序。我一直在使用File tmpDir = new File("path"); if(tmpDir.exists()) break;
。但是在运行了几次测试并最终看到它为什么没有工作后,我发现该程序首先进行这些测试,然后开始执行带有cmd的程序。我尝试将syso放在代码中的随机位置,并将所有这些放在首次执行的位置,然后命令提示符开始工作。在任何帮助下,我将不胜感激。如果还有不清楚的地方,比如说。
代码示例:
String[] command = {
"cmd"
};
Process p;
try {
p = Runtime.getRuntime().exec(command);
new Thread(new SyncPipe(p.getErrorStream(), System.err)).start();
new Thread(new SyncPipe(p.getInputStream(), System.out)).start();
PrintWriter stdin = new PrintWriter(p.getOutputStream());
for(int i = 0; i < 30; i++)
{
stdin.println("wget -r --output-document=file.zip --http-user=user --http-password=pass http://example.com");
stdin.println("7za e file.zip");
File tmpDir = new File(file.zip);
System.out.println(tmpDir.getAbsolutePath());
if(tmpDir.exists())
break;
}
从程序中减少代码。在absolutePath()
stdin.println()
会在控制台上打印30次