2013-05-07 32 views
0

我想複製和現有的目錄結構(不需要文件內容本身,0長度的虛擬文件將做)。但是mkdirs()將不會創建必要的目錄,導致file.createNewFile()拋出IOException。該代碼是:java文件mkdirs和createNewFile不會工作

private static void readAndCopy(File fileToCopy) throws IOException { 
    File localVersion = new File(fileToCopy.getCanonicalPath().replace("O:\\", "C:\\xfer\\")); 
    System.out.println("Replicating " + fileToCopy.getCanonicalPath() + " to " + localVersion.getCanonicalPath()); 

    if (fileToCopy.isDirectory()) { 
     boolean dirCreated = localVersion.getParentFile().mkdirs(); 
     System.out.println(localVersion.getCanonicalPath() + " " + (dirCreated ? "" : "not ") + "created"); 

     if (dirCreated) { 
      for (File content : fileToCopy.listFiles()) { 
       readAndCopy(content); 
      } 
     } 

    } else { 
     if (!localVersion.exists()) { 
      localVersion.createNewFile(); 
     } 
    } 
} 

public static void main(String[] args) throws IOException { 
    readAndCopy(new File("o:\\MY_SRC_DIR")); 
} 

的錯誤信息是:

java.io.IOException: The system cannot find the path specified 
    at java.io.WinNTFileSystem.createFileExclusively(Native Method) 
    at java.io.File.createNewFile(Unknown Source) 

我也試過

File origParentFile = fileToCopy.getParentFile(); 
File newParent = new File(origParentFile.getCanonicalPath().replace("O:\\", "C:\\xfer\\")); 
localVersion = new File(newParent, fileToCopy.getName()); 

,但也不能工作。

+0

拋出什麼IOException?什麼信息? – EJP 2013-05-07 20:01:04

+0

對不起@EJP,我忘了它。請參閱更新的說明。 – 2013-05-08 07:29:46

回答

1

你錯了。 'mkdirs()is creating all the directories including the file name itself as a directory. You need to call localVersion.getParentFile()。mkdirs()。'

+0

我試過了,但是症狀非常一致:目錄,子目錄未創建,'createNewFile()'拋出'IOException'。更不用說'C:\ xfer'下已經存在'MY_SRC_DIR'。 – 2013-05-07 10:21:42

+0

你的意思是'mkdirs()'返回true,但什麼都不做?沒有在磁盤上創建實際的目錄? – EJP 2013-05-10 00:38:54

+0

不,即使父目錄已經存在(已經手動創建),mkdirs()也會返回false。 – 2013-05-10 07:20:53