2014-11-21 124 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