找到移动到不同位置的文件的新位置 - Java

时间:2015-10-11 16:31:25

标签: java header-files

我的应用程序的旧版本中有一个头文件文件夹。 直接在该文件夹内以及许多子文件夹中有许多头文件......现在我们将使用更新版本的应用程序,其中头文件路径存在于不同于以前的子文件夹中。我想写一个java程序(最好),它给我一个旧的路径和头的新路径的一对一映射。我在这两个版本中都有头文件的根目录...我想找到关于根目录的头文件路径的差异。

标题文件旧版本的根目录: Root1

新版本的头文件根目录: Root2

在Root1下,考虑有三个子文件夹: Folder1,Folder2,Folder3

在Root2下,考虑有三个子文件夹: Folder1,Folder2,Folder3

在Root1 / Folder1下有三个文件: File1,File2,File3

Root1/Folder1/File1,
Root1/Folder1/File2,
Root1/Folder1/File3.

现在在新版本中,这些文件就像:

Root2/Folder1/File1,
Root2/Folder2/File3,
Root2/Folder3/File2.

重新构建文件。 我想编写一个程序,通过扫描根文件夹找出这些文件的新版本路径:

必需的输出:

Root1/Folder1/File1 = Root2/Folder1/File1
Root1/Folder1/File2 = Root2/Folder3/File2
Root1/Folder1/File3 = Root2/Folder2/File3.

很抱歉,如果我不清楚的话。如果我们在编程中遇到任何问题,那么SO就是一个参考站点。我坚持这个逻辑的想法已经用完了。请帮助。

编辑1:

抱歉延迟..两个版本的文件名相同。让我说出要求。在整个项目中,包含数百个头文件,参考旧版本...基于c和cpp的代码。现在我们需要根据新的标头路径更改所有include语句的代码。因此,通过Windows资源管理器逐个手动更改是乏味的。头文件是否已更改无关紧要。新版本中可能添加了新的函数定义。但我们需要包含相同的头文件。

这个程序可能会节省大量的手动时间。谢谢:))

2 个答案:

答案 0 :(得分:2)

这假设在从一个目录树迁移到另一个目录树期间文件名不会更改。

这很快且很脏,并且缺乏所有健全性检查和错误处理,但它说明了要点:递归下降到目录中以收集文件以收集文件名到路径的映射。 comp方法只从第一个目录树中获取名称,并显示两个树的路径名。

public void find( File root, Map<String, String> map ){
    File[] entries = root.listFiles();
    for( File file: entries ){
        if( file.isDirectory() ){
            find( file, map );
        } else {
            map.put( file.getName(), file.getAbsolutePath() );
        }
    }
}

public void comp( File root1, File root2 ){
    Map<String,String> map1 = new HashMap<>();
    find( root1, map1 );
    Map<String,String> map2 = new HashMap<>();
    find( root2, map2 );
    for( String name1: map1.keySet() ){
        String path1 = map1.get( name1 );
        String path2 = map2.get( name1 );
        System.out.println( name1 + ": " + path1 + "->" + path2 ); 
    }
}

答案 1 :(得分:-1)

假设他们的名字相同,

你可以:

File oldH = "/";
For (path:oldH) {
 // Map<fname,dir> odb=path;
File newH = "/new/";
For (path:newH)
 // Map<fname,dir> ndb=path;
Array newarray[]=ndb.size();
While(odb.hasNext()) {
    While (ndb.hasNext()) {
    If (odb.fname.next()==ndb.fname.next()) {
        newarray[i][0]= odb.path;
        newarray[i][1]= ndb.path;
        break;
    }
    i++;
}

它只是伪代码,但我希望有所帮助。