2017-06-13 136 views
1

我有一個程序應該將整個文件夾(包含子文件夾)中的所有文件重命名爲臨時文件名,將這些文件複製到不同的目錄,然後將臨時文件名更改回到原始文件名。在此過程中,我想保留所有文件夾名稱相同。當我運行下面的代碼,它的作用是改變我指定的路徑中的頂層文件夾的名稱:複製目錄中的文件並更改文件名

package shortenFilenames; 
import java.io.File; 
import java.io.IOException; 
import java.nio.file.Files; 
import java.nio.file.Path; 

public class shortenFilenameClass 
{ 

     public static void main(String[] args) throws IOException 
     { 
      String absolutePathLocal = "C:\\Users\\talain\\Desktop\\marketingOriginal"; //original files 
      String absolutePathOnedrive= "C:\\Users\\talain\\Desktop\\fakeOnedrive"; //path to onedrive 

      File local = new File(absolutePathLocal); 
      File onedrive = new File(absolutePathOnedrive); 

      File[] filesInDir = local.listFiles(); 
      for(int i = 0; i < filesInDir.length; i++) 
      { 
        String name = filesInDir[i].getName(); 
        System.out.println(name); 
        String newName = String.valueOf(i); 

        File oldPath = new File(absolutePathLocal + "\\" + newName); 
        System.out.println("oldPath: " + oldPath); 
        filesInDir[i].renameTo(new File(oldPath.toString())); 

        File newPath = new File(absolutePathOnedrive + "\\" + newName); 
        copyFileUsingJava7Files(oldPath, newPath); 

        newPath.renameTo(new File(newPath.toString())); 

        System.out.println("renamed: " + name + "to: " + newName + ", copied to one drive, and changed back to original name"); 

      } 
     } 

     private static void copyFileUsingJava7Files(File source, File dest) throws IOException { 
      Files.copy(source.toPath(), dest.toPath()); 
     } 
} 
+0

爲什麼要在複製時更改臨時文件的名稱然後將名稱更改回原來的名稱......爲什麼不直接將本地路徑中的所有文件複製到一個驅動器路徑而不更改名稱? –

+0

由於我試圖複製的某些文件的文件名太長,並且文件資源管理器不允許我複製它們。 – Tom

+0

我從來沒有聽說過一個文件瀏覽器,可以防止複製,因爲名稱很長!那是什麼文件瀏覽器?爲什麼它不允許他們?試圖複製它們時收到了什麼錯誤信息? – niceman

回答

0

我只是做了以下並將其複製任何文件均在第一路徑進入第二條路。如果它失敗了,請告訴我錯誤輸出。

for(int i = 0; i < filesInDir.length; i++) 
{ 
    String name = filesInDir[i].getName(); 
    System.out.println(name); 
    Files.copy(new File(absolutePathLocal + "\\" + name).toPath(),new File(absolutePathOnedrive + "\\" + name).toPath()); 
} 

您的代碼還假定這些目錄已經存在於您的系統中,否則您將遇到FileNotFound異常。

相關問題