当前位置: 首页 > 知识库问答 >
问题:

从包含java命令的java文件中执行.class

辛才俊
2023-03-14
import java.io.*;

public class chk 
{
String command;
public String  getMsg(String fileName,File Path1) 
{
    String dir,name=" ";
    int x;
    x=fileName.indexOf(".class");name=fileName.substring(0, x);
    command ="java " + name +" < C:\\iptest\\input.txt > C:\\outtest\\"+name+".txt";
    String output = executeCommand(command,Path1);
    if(output.compareTo("")==0)             
        output = "Compilation Successfull!!";
    return output;
}
private String executeCommand(String command,File Path1) 
{
    StringBuffer output = new StringBuffer();
    Process p;
    try 
    {
        p = Runtime.getRuntime().exec(command,null,Path1);
        //p.waitFor();
        BufferedReader reader1 = new BufferedReader(new InputStreamReader(p.getErrorStream()));
        BufferedReader reader2 = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = "";           
        while ((line = reader1.readLine())!= null) 
        {
            output.append(line + "\n");
        }
        while ((line = reader2.readLine())!= null) 
        {
            output.append(line + "\n");
        }
    } catch (Exception e) 
    {
        e.printStackTrace();
    }
    return output.toString();
}
public static void main(String args[])throws IOException
{
    String x;
    File dir=new File("C:\\Users\\RONEET\\Desktop");
    chk ob=new chk();
    x=ob.getMsg("hello.class",dir);
    System.out.println("OUtput : "+x);
}
 }

我在这个文件中所做的是从一个java文件中执行一个hello.class文件,并使用正确的文件名将其输出作为txt文件存储在以下位置< code>C:\outtest\。但是当我编译上面的文件时,我的程序进入了某种无限循环,永远不会终止。

编辑 : 您好.java

import java.io.*;
class hello
{
public static void main(String agrs[])throws IOException
{
    BufferedReader s=new BufferedReader(new InputStreamReader(System.in));
    String str;
    str=s.readLine();
    System.out.print(str+"\n");
}
}

共有2个答案

公西马鲁
2023-03-14

流的读取可能是阻塞的。您可以尝试将流读取放入单独的线程中。

南宫阳冰
2023-03-14

免责声明-我已经发现我的解决方案可以工作,除非我使用标准输入和标准输出重定向

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class Runner {

    public static void pipeStream(InputStream input, OutputStream output) throws IOException {
        byte buffer[] = new byte[1024];
        int numRead = 0;

        do {
            numRead = input.read(buffer);
            output.write(buffer, 0, numRead);
        } while (input.available() > 0);

        output.flush();
    }

    public static void main(String[] argv) {
        File dir = new File("C:\\Users\\Leo\\workspace\\STackOverflow\\src\\");
        FileInputStream fileIn = null;
        FileOutputStream fileOut = null;

        OutputStream procIn = null;
        InputStream procOut = null;

        try {
            fileIn = new FileInputStream(new File(dir, "input.txt"));
            fileOut = new FileOutputStream(new File(dir, "output.txt"));

            Process process = Runtime.getRuntime().exec("C:\\jdk1.7.0_51\\bin\\java Hello", null, dir);
            procIn = process.getOutputStream();
            procOut = process.getInputStream();

            pipeStream(fileIn, procIn);
            pipeStream(procOut, fileOut);
        } catch (IOException ioe) {
            System.out.println(ioe);
        }
    }
}

考虑到

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Hello {

    /**
     * @param args
     */
    public static void main(String[] args) {
        try{
            BufferedReader br = 
                          new BufferedReader(new InputStreamReader(System.in));

            String input;

            while((input=br.readLine())!=null){
                System.out.println("processed"+input);
            }

        }catch(IOException io){
            io.printStackTrace();
        }   

    }

}

这和

"java Hello < input.txt > output.txt"

给定输入.txt例如

1
2
3
4

它生成output.txt,就像

processed1
processed2
processed3
processed4
 类似资料:
  • 问题内容: 我想从bat文件执行Java类,它包括的用法。下面是代码: 运行它时出现以下错误。我认为“包含”存在任何问题,有人可以帮助我吗? 问题答案: 类似于classpath。 在Linux下: 在Windows下:

  • 问题内容: 我有一个bash脚本文件,正在shell中使用source命令调用它,并且正在设置许多环境变量。然后,我可以使用环境变量正在设置的所有工具。 现在,我想使用以下方法在Java中执行相同的操作: 我知道源是内部命令,不能从Java调用它。 还有其他方法可以通过java在该文件中设置环境变量,以便以后可以在我的代码中使用它们来调用其他命令吗? 先感谢您! 问题答案: 尝试执行类似的操作,在

  • 问题内容: 我正在尝试从用户读取一个文件,其中每一行都是一个命令,然后运行它(可以假定命令是合法的),但是当我给出类似的命令时,出现运行时异常错误: 线程“主”中的异常java.io.IOException:无法运行程序“ echo”:CreateProcess错误= 2,系统找不到指定的文件 我正在尝试运行以下命令: 在哪里。但这确实适用于类似的命令,所以看来我得到的运行时就像“运行”窗口而不是

  • 问题内容: 我正在尝试从GNU / Linux平台上的Java应用程序执行shell命令。问题是,尽管它可以从bash成功运行,但调用另一个Java应用程序的脚本永远不会结束。我试图调试它: 我尝试使用:ProcessBuilder(); 和Runtime.getRuntime()。exec(cmd); 看起来它正在等待完成。有任何想法吗? 谢谢,Laurențiu 问题答案: 您是否正在处理标准

  • 我正在使用以下代码执行一个SH文件Linux 此代码工作,但是我不能使用SH文件中的屏幕命令从Java执行时,我得到这个错误 必须连接到端子。 那么,可以将java“连接”到终端吗?当我通过SSH连接时,我想也能看到这个屏幕,所以我认为它必须连接到终端,当你通过SSH连接到服务器时,终端会显示出来。

  • 我试图从maven命令行运行一个类,但得到以下错误。不知道我错过了什么。有谁能引导一下吗? pom.xml