C到java文件的读取和打印

时间:2013-11-21 02:37:40

标签: java c

我有一个C代码,它是以下输出:

INPUT:./includeCrawler -Itest s_01.c

输出:s_01.o: s_01.c i_60.h i_44.h i_46.h i_04.h i_51.h i_15.h i_33.h i_29.h i_16.h

S_01.c:
#include "i_60.h"
#include "i_44.h"
#include "i_46.h"
#include "i_04.h"
#include "i_51.h"
#include "i_15.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include <sys/time.h>
#include <arpa/inet.h>
#include <sys/types.h> 
#include <signal.h>

i_60.c
#ifndef _I_60_H_
#define _I_60_H_

#include "i_33.h"
#include "i_04.h"
#include "i_29.h"

#include <stdio.h>

#endif /* _I_60_H_ */

我试图将其转换为java,因此它读入一个文件,例如s_01.c,它将打印上面的输出。文件本身将读取所有i.h并输出它。如果存在依赖关系,例如程序读取s_01.c它将读取s_01.c中的文件并且它将在其中读取#include“i_60.h”然后它将转到i_60.h并找到更多与我相关的东西。它将继续这样做,直到它找不到我的路径。

以下是我到目前为止所做的事情: 我已经成功阅读了例如1个文件并打印出与i相关的所有内容然后我把它扔进了一个链表。但是我不知道如何继续调用彼此的文件然后打印出来。

read: s_02.c 
Output:
[i_02.h]
[i_02.h, i_52.h]
[i_02.h, i_52.h]
[i_02.h, i_52.h]
[i_02.h, i_52.h, i_51.h]
[i_02.h, i_52.h, i_51.h]
[i_02.h, i_52.h, i_51.h]
[i_02.h, i_52.h, i_51.h]
[i_02.h, i_52.h, i_51.h, i_03.h]
[i_02.h, i_52.h, i_51.h, i_03.h, i_41.h]

1 个答案:

答案 0 :(得分:0)

好吧,我假设你已经实现了一个名为readFile(String filename)的函数,它将返回一个它所依赖的文件名的数组(或者像你说的那样是一个linkedList)。

您可以做的是使用递归过程。顺便说一句,您可以使用Set来保存文件名而不是链接列表。

// a set of filenames that have been read
HashSet<String> setOfProceededFilenames = new HashSet<String> ();

// recursively read the files
private void recursivelyReadFiles(String filename) {
    // we have defined String [] readFile(String filename)
    String [] dependencies = readFile(filename);

    // we only read those haven't been proceeded
    for (String dependentFile : dependencies) {
        if (!setOfProceededFilenames.contains(dependentFile)){
            // add this file to the set and read its dependencies
            setOfProceededFilenames.add(dependentFile);
            recursivelyReadFiles(dependentFile);
        }
    }
}