我的应用程序的旧版本中有一个头文件文件夹。 直接在该文件夹内以及许多子文件夹中有许多头文件......现在我们将使用更新版本的应用程序,其中头文件路径存在于不同于以前的子文件夹中。我想写一个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资源管理器逐个手动更改是乏味的。头文件是否已更改无关紧要。新版本中可能添加了新的函数定义。但我们需要包含相同的头文件。
这个程序可能会节省大量的手动时间。谢谢:))
答案 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++;
}
它只是伪代码,但我希望有所帮助。