运行时问题 - java

如何在Windows上执行此操作,未创建文件filename.txt。

Process p = Runtime.getRuntime().exec("cmd echo name > filename.txt");

显然,预期的输出是应创建内容为“名称”的“ filename.txt”(C:\ Documents and Settings \ username \ filename.txt)。

即使未使用processBuilder创建文件“ filename.txt”,也可以使用以下代码进行管理

       Runtime runtime = Runtime.getRuntime();
       Process process = runtime.exec("cmd /c cleartool lsview");
       // Directly to file

//Process p = Runtime.getRuntime().exec( 
//              new String[] { "cmd", "/c", "cleartool lsview > filename.txt" },null, new File("C:/Documents and Settings/username/")); 

       InputStream is = process.getInputStream();
       InputStreamReader isr = new InputStreamReader(is);
       BufferedReader br = new BufferedReader(isr);
       String line;

       System.out.printf("Output of running %s is:", 
           Arrays.toString(args));

       while ((line = br.readLine()) != null) {
         System.out.println(line);
       }

或者,使用ProceessBuilder,

Process process = new ProcessBuilder( "cmd", "/c", "cleartool lsview" ).start();
InputStream is = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));

System.out.printf("Output of running %s is:", Arrays.toString(args));

String line;
while ((line = br.readLine()) != null) {
    System.out.println(line);
}

参考方案

您实际上应该使用ProcessBuilder而不是Runtime.exec(请参见the docs)。

ProcessBuilder pb = new ProcessBuilder("your_command", "arg1", "arg2");
pb.directory(new File("C:/Documents and Settings/username/"));

OutputStream out = new FileOutputStream("filename.txt");
InputStream in = pb.start().getInputStream();

byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0)
    out.write(buf, 0, len);

out.close();

(如果我可以使用Windows机器,我将其调整为cmd并进行回显...请随时编辑此帖子!)

java runtime.freememory()与jconsole输出不匹配 - java

我当时遇到一个奇怪的问题。我有多个JVM在运行,我需要获取它们的内存使用情况详细信息。当我通过Runtime.getFreeMemory()获取详细信息并将其与jconsole输出进行比较时,会有很大的不同。可能是什么问题?使用Runtime.getFreeMemory()时我得到的信息不正确或ManagementFactory.getMemoryMXBea…

Java Double与BigDecimal - java

我正在查看一些使用双精度变量来存储(360-359.9998779296875)结果为0.0001220703125的代码。 double变量将其存储为-1.220703125E-4。当我使用BigDecimal时,其存储为0.0001220703125。为什么将它双重存储为-1.220703125E-4? 参考方案 我不会在这里提及精度问题,而只会提及数字…

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…