2014-11-21 116 views
0

我想写一个java的代码,做以下,但ATM不知道如何实现这一点:组文件路径名后

让我们说:我已经在本地系统上的不同或相同的路径7个文件,我想别的地方复制使用尽可能少的路径名在我的shell命令尽可能

correctfiles是我想要的文件,somefiles我不关心

比如我不想:

copy C:\tmp\folder1\subfolder12\correctfile3 && copy C:\tmp\folder1\subfolder12\correctfile4 

,而不是我想要的Uberfolder尽可能:

copy C:\tmp\folder1\subfolder12\ 

,并且要求有在副本C中没有somefile:\ tmp目录\文件夹1 \ subfolder12 ,因为我不想somefile转移

例如

C:\ TMP \ folder1中:somefile1,somefile2

C:\ TMP \ folder1中\ subfolder11:correctfile1,correctfile2

C:\ TMP \ folder1中\ subfolder12:correctfile3,correctfile4

C:\ TMP \文件夹2 \ subfolder21:correctfile5

C:\ TMP \文件夹2 \ subfolder22:correctfile6,correctfile7

所以在这个例子中我的Coul D使用

copy C:\tmp\folder2 

,因为该文件夹中全部文件correctfiles

和其他我将不得不

copy C:\tmp\folder1\subfolder11 
copy C:\tmp\folder1\subfolder12 

因为有UberfolderÇsomefiles:\ tmp目录\文件夹1,我不想转让

我怎么能做到这一点? 一个java类,它根据路径名对文件进行分组,使用尽可能少的路径名称

+0

你知道,分解和复制目录而不是包含单个文件会导致语义中的细微变化(并且可能并非如此微妙),从而导致实际复制数据的方式和方式? – laune 2014-11-21 15:42:33

+0

是的,但是对于这项任务来说并不重要,只是试图找出理论上如何实现这一点。 – sakal 2014-11-21 15:52:02

+0

这似乎是一个毫无意义的复杂优化。 [代码的目的是什么?](http://mywiki.wooledge。org/XyProblem) – l0b0 2014-11-21 15:56:20

回答

0

这其实很简单。从List<File> filesToCopy创建一个

Map<String,Set<String>> dir2names = new HashMap<>(); 
for(File f: filesToCopy){ 
    String name = f.getName(); 
    // test name for null and do error handling 
    String dir = f.getParent(); 
    // dir for null and do error handling 
    Set<String> names = dir2names.get(dir); 
    if(names == null){ 
     names = new HashSet<>(); 
     dir2names.put(dir, names); 
    } 
    names.add(name); 
} 

将目录部分映射到文件名。遍历这张地图的键

for(String dirname: dir2names.keySet()){ 
    File[] entries = new File(dirname).listFiles(); 
    if(entries.length > dir2names.get(dirname).size()){ 
     // add list created from dirname + set of names to files to copy 
     for(String name: dir2names.get(dirname){ 
      String pathname = new File(dirname, name).getAbsolutePath(); 
      // add pathname to files to copy 
     } 
    } else { 
     // add directory identified by dirname to files to copy 
    } 
} 

我不认为这是值得做这个递归。

+0

不知道我明白这一点,对不起这里有一个初学者 – sakal 2014-11-21 18:10:33

+0

你不明白什么? Stackoverflow不是一个编程服务,我只是说“向我们显示你的代码”,这是对你的问题的习惯性回应。 – laune 2014-11-21 18:13:17

+0

非常感谢您的回答。也许我没有把它说得对,我没有要求更好或更易于理解的解决方案。刚才陈述我想了解你的解决方案。我还没有编码,只是一个概念性的想法。 – sakal 2014-11-21 18:22:26