getInputStream+;BufferedReader+;Java中的文件读取器

getInputStream+;BufferedReader+;Java中的文件读取器,java,c,bufferedreader,processbuilder,Java,C,Bufferedreader,Processbuilder,我正在尝试使用ProcessBuilder和.getInputStream()在Java中运行一个C应用程序。我认为它可以得到这个应用程序的输出?那么我想我需要使用一个包在BufferedReader中的文件阅读器?我不确定如何连接进程和文件阅读器 我正在翻译一些C(在评论中): void run(){ //文件*点; //我认为上面提到的是文件?所以我使用了一个InputStream对象。 私有输入流点; //为这种情况生成八叉树 //=============================

我正在尝试使用ProcessBuilder和.getInputStream()在Java中运行一个C应用程序。我认为它可以得到这个应用程序的输出?那么我想我需要使用一个包在BufferedReader中的文件阅读器?我不确定如何连接进程和文件阅读器

我正在翻译一些C(在评论中):

void run(){
//文件*点;
//我认为上面提到的是文件?所以我使用了一个InputStream对象。
私有输入流点;
//为这种情况生成八叉树
//=============================
//sprintf(befehl,“%soconv-f%s%s\%s\”>%s\n“,”,材质文件,BlindRadianceFiles\u组合,几何文件,太阳光,八叉树);
//注意,我已将“befehl”替换为“cmd”。
String.format(cmd,“%soconv-f%s%s\%s\”>%s\n“,”,材质文件,BlindRadianceFiles\u组合,几何文件,太阳光,八叉树);
//点数=波本(在“r”之前);
//例如,如果您想读取程序的输出,可以使用POPEN(“程序”,“r”)。另一方面,如果您想写入其输入,可以使用POPEN(“程序”,“w”)。
Process=newprocessbuilder(cmd.start();
POINTS=process.getInputStream();
//while(fscanf(点数,“%s”,buf)!=EOF)
//printf(“%s\n”,buf);
//pclose(点数);
BufferedReader in=新的BufferedReader(新文件读取器(“”);
而((in=fileReader.readLine())!=null){
System.out.printf(“%s\n”,buf);
}
POINTS.close();
更新:如下:

我现在得到了以下信息,这似乎有意义吗?有两个不同的C程序,它们基于命令生成文件并执行一些特定的计算

void run_oconv_and_rtrace() throws IOException{
    String line;
    String cmd = null;

    //generate octree for this case
    //=============================
    //TODO review how the command is generated and what information is required for this analysis
    cmd = String.format(cmd,"%soconv -f %s %s %s \"%s\" > %s\n","", material_file, BlindRadianceFiles_Combined, geometry_file, sun_rad, octree);

    /* Use the processbuilder to run an external process (ie. Radiance C program).
     * process.getOutputStream(): return the standard input of the external program. (ie. Java writes to Process).
     * process.getInputStream(): return the standard output of the external program. (ie. Jave reads from Process).
     */

    ProcessBuilder builder = new ProcessBuilder(cmd);
    builder.redirectErrorStream(true);                  //adds error stream to inputstream
    Process process = builder.start();

    OutputStream POINTS_FROM_JAVA_TO_C = process.getOutputStream();
    InputStream POINTS_FROM_C_TO_JAVA = process.getInputStream();

    //BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(POINTS_FROM_JAVA_TO_C));
    BufferedReader reader = new BufferedReader(new InputStreamReader(POINTS_FROM_C_TO_JAVA));

    //Read output of Radiance:
    while ((line = reader.readLine()) != null){
        System.out.printf("%s \n", buf);
    }

    //////////////////////////


    // run rtrace and calcualte the shading status for this case
    //==========================================================
    //TODO review command
    cmd = null;
    cmd = String.format(cmd, "rtrace_dc -ab 0 -h -lr 6 -dt 0 \"%s\" < %s > %s\n",octree,long_sensor_file[BlindGroupIndex],dir_tmp_filename[NumberOfBlindGroupCombinations]);

    builder = new ProcessBuilder(cmd);
    builder.redirectErrorStream(true);                  //adds error stream to inputstream
    process = builder.start();

    POINTS_FROM_C_TO_JAVA = process.getInputStream();
    reader = new BufferedReader(new InputStreamReader(POINTS_FROM_C_TO_JAVA));

    //Read output of Radiance:
    while ((line = reader.readLine()) != null){
        System.out.printf("%s \n", buf);
    }

    //delete files
    //HERE WE NEED TO DELETE THE OCTREE FILES CREATED!

    BlindGroupNumberForThisCombination[NumberOfBlindGroupCombinations]=BlindGroupIndex;
    NumberOfBlindGroupCombinations++;
}
void run\u oconv\u和\u rtrace()引发IOException{
弦线;
字符串cmd=null;
//为这种情况生成八叉树
//=============================
//TODO查看命令是如何生成的,以及此分析需要哪些信息
cmd=String.format(cmd,“%soconv-f%s%s\%s\”>%s\n“,”,材质文件,BlindRadianceFiles\u组合,几何文件,太阳光,八叉树);
/*使用processbuilder运行外部进程(即Radiance C程序)。
*process.getOutputStream():返回外部程序的标准输入(即Java写入进程)。
*process.getInputStream():返回外部程序的标准输出(即Jave从进程读取)。
*/
ProcessBuilder=新的ProcessBuilder(cmd);
redirectErrorStream(true);//将错误流添加到inputstream
Process=builder.start();
OutputStream将_从_JAVA_指向_C=process.getOutputStream();
InputStream将_从_C_指向_JAVA=process.getInputStream();
//BufferedWriter=新的BufferedWriter(新的OutputStreamWriter(从JAVA到C的点);
BufferedReader=新的BufferedReader(新的InputStreamReader(从C到JAVA的点);
//读取辐射度的输出:
而((line=reader.readLine())!=null){
System.out.printf(“%s\n”,buf);
}
//////////////////////////
//运行rtrace并计算这种情况下的着色状态
//==========================================================
//TODO review命令
cmd=null;
cmd=String.format(cmd,“rtrace_dc-ab 0-h-lr 6-dt 0\%s\”<%s>%s\n”,八叉树,长传感器文件[BlindGroupIndex],目录tmp文件名[NumberOfBlindGroupCompositions]);
生成器=新的ProcessBuilder(cmd);
redirectErrorStream(true);//将错误流添加到inputstream
process=builder.start();
将_从_C_指向_JAVA=process.getInputStream();
reader=新的BufferedReader(新的InputStreamReader(从C到JAVA的点);
//读取辐射度的输出:
而((line=reader.readLine())!=null){
System.out.printf(“%s\n”,buf);
}
//删除文件
//这里我们需要删除创建的八叉树文件!
BlindgroupNumberForIsCombination[NumberOfBlindGroupCombinations]=BlindGroupIndex;
numberofblindgroupcombines++;
}
更改此行

BufferedReader in = new BufferedReader(new FileReader("<filename>"));
BufferedReader in = new BufferedReader(new FileReader("<filename>"));
BufferedReader in = new BufferedReader(new InputStreamReader(POINTS));