Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我输入批处理文件的代码不起作用?_Java_Batch File_Stream_Return_Output - Fatal编程技术网

Java 为什么我输入批处理文件的代码不起作用?

Java 为什么我输入批处理文件的代码不起作用?,java,batch-file,stream,return,output,Java,Batch File,Stream,Return,Output,我试图写入一个已加载的批处理文件进程,但我不知道如何执行与返回相同的操作 Java代码: import java.io.DataInputStream; import java.io.DataOutputStream; import java.util.Scanner; public class Start { public static void main(String[] args) { try { Process p = Runtime.g

我试图写入一个已加载的批处理文件进程,但我不知道如何执行与返回相同的操作

Java代码:

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.util.Scanner;

public class Start {
    public static void main(String[] args) {
        try {
            Process p = Runtime.getRuntime().exec("C:\\Users\\Max\\Desktop\\test.bat");// Runtime.getRuntime().exec("keytool -genkey -alias " + name.replace(" ", "").trim() + "  -keystore key");
            DataInputStream in = new DataInputStream(p.getInputStream());
            Scanner scanner = new Scanner(in);
            // System.out.println(scanner.nextLine());
            DataOutputStream out = new DataOutputStream(p.getOutputStream());
            out.write("test\n\n".getBytes());
            out.flush();
            out.close();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}
批次代码:

@echo off
set /p delBuild=lozors?: 
echo test >> test.txt

运行时,它应该输出到我桌面上的文本文件。。。但它似乎不接受输入?我尝试过使用\n和\n\n,以及编写和刷新,但都不起作用。想法?

首先,抱歉,我不是批处理开发人员,我已经很久没有做过任何(严肃的)批处理编码了,所以我不认识
set/p
命令

代码不起作用的原因可能有很多,但最明显的是批处理文件中的这个命令

echo test >> test.txt
这是对
test
的“回声”
test.txt
。它与你键入的内容不一致

为此,您需要回显环境变量
delBuild
,您的输入将分配给该变量

echo %delBuild% >> test.txt
还要注意,一旦发送
\n
,文本很可能会提交到环境变量,批处理文件将继续运行

这是我在测试中使用的批处理文件

@echo off
set /p delBuild=lozors?: 
echo %delBuild% >> test.txt
这是我用来测试它的代码

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class TestProcessBuilder02 {

    public static void main(String[] args) {
        try {
            ProcessBuilder pb = new ProcessBuilder("test.bat");
            pb.redirectError();
            Process p = pb.start();

            OutputStream os = null;
            try {
                os = p.getOutputStream();
                os.write("I am invincible".getBytes());
            } finally {
                try {
                    os.close();
                } catch (Exception e) {
                }
            }
            InputStream is = null;
            try {
                is = p.getInputStream();
                int in = -1;
                while ((in = is.read()) != -1) {
                    System.out.print((char)in);
                }
            } finally {
                try {
                    is.close();
                } catch (Exception e) {
                }
            }
            int exit = p.waitFor();
            System.out.println("Exited with " + exit);
        } catch (Exception exp) {
            exp.printStackTrace();
        }
    }

}

注意-我使用了
ProcessBuilder
,因为它通常更容易和更宽容地尝试单独使用
Runtime#exec
——IMHO

我实际上只是在以下位置使用了答案:除了,我没有使用bufferedwriter,因为它似乎会阻止它工作。

为什么在编写文本时使用DataOutputStream?为什么不使用PrintStream并简单地使用它的
println(…)
方法来编写新行呢?您希望发生什么?
test.bat
不读取任何输入。“但它似乎不接受输入?”但为什么要这样做?首先,批处理文件不需要任何输入批处理文件正在将字符串
test
写入
test.txt
的末尾。无论您在命令行中键入什么,它都会这样做。我还“怀疑”当您从进程中读取输入时,它可能已经停止执行。。。