将文件写入仍然不存在的目录

时间:2010-12-19 22:51:22

标签: java windows file-io

我在 WINDOWS

上使用此脚本
public void copyFile(File sourceDirectory, File targetFile, File targetDirectory) throws IOException{
    String temp = targetFile.getAbsolutePath();
    String relativeD = temp.substring(sourceDirectory.getAbsolutePath().length(), targetFile.getAbsolutePath().length());
    String rootD = sourceDirectory.getName();
    String fullPath = targetDirectory.getAbsolutePath() + rootD + relativeD;
    File fP = new File( fullPath );
    System.out.println("PATH: " + fullPath);
    FileChannel inChannel = new FileInputStream(targetFile).getChannel();
    FileChannel outChannel = new FileOutputStream( fP ).getChannel();
    int maxCount = (64 * 1024 * 1024) - (32 * 1024);
    long size = inChannel.size();
    long position = 0;
    while (position < size) {
            position += inChannel.transferTo(position, maxCount, outChannel);
     }
    if (inChannel != null) inChannel.close();
    if (outChannel != null) outChannel.close();
}

我正在做的很简单。我需要将文件从一个位置复制到另一个位置,但我必须保留它们所在的目录。

所以使用relativeD我会采用以下内容: dir / files.sql 或只是 files.sql

这种情况正在发生,因为对于特定的目录,我需要递归地复制它们,尊重树结构。

问题是这种方法不起作用。我不知道为什么,因为如果我使用简单的

    FileChannel outChannel = new FileOutputStream( new File( targetDirectory, targetFile ) ).getChannel();

它有效。我想这种情况正在发生,因为在这种情况下,它将文件复制到现有目录下。

1 个答案:

答案 0 :(得分:6)

根据此article(Google搜索热门搜索'java mkdir recursive'):

  

看一下java.io.File:使用mkdirs函数完美地完成工作:

    new File("c:/aaa/bbb/ccc/ddd").mkdirs();