【问题标题】:Java - Strange directory problem?Java - 奇怪的目录问题?
【发布时间】:2011-10-05 13:43:54
【问题描述】:

当我使用以下代码运行一个类时:

public static void main(String[] args)
{
    createDuplicateStructure("in", "out");
}

public static void createDuplicateStructure(String path_start, String path_result)
{
    File start = new File(path_start);
    File result = new File(path_result);
    duplicateDirectoryStructure(start, result);
}

public static void duplicateDirectoryStructure(File start_dir, File result_dir)
{
    //FileFilter used by listFiles(filter) - to make sure they are dirs
    FileFilter dirs_only = new FileFilter() 
            { 
                public boolean accept(File file){  return file.isDirectory();} 
            };
    File[] dir_contents = start_dir.listFiles(dirs_only);
    for(File dir : dir_contents)
    {
        File duplicate = new File(result_dir.getPath(), dir.getName());
        if(dir.mkdir())
        {
            duplicateDirectoryStructure(dir, duplicate);
        }
        else
        {
            System.out.println("ERROR: Unable to create dir! (" + duplicate.getPath() + ")");
        }
    }
}

我在控制台中得到了这个:

 Error: Unable to create dir! (out/a)
 Error: Unable to create dir! (out/a)
 Error: Unable to create dir! (out/a)

“out”目录与 .jar 位于同一目录中。 有一个“in”目录,其中包含“a”、“b”和“c”目录(用于测试)。

任何想法为什么这不起作用?

谢谢!

【问题讨论】:

  • 如果你代替duplicate.getPath()打印duplicate.getAbsolutePath()会有什么结果

标签: java file debugging file-io directory


【解决方案1】:

线

`if(dir.mkdir())`

正在尝试创建现有的目录结构

如果您将其更改为
if(duplicate.mkdir())

你会遇到另一个问题,它试图在 out 下创建一个尚不存在的子目录。

所以改成
if(duplicate.mkdirs())

这将创建目录结构,或者在开始循环之前创建 out 目录。

【讨论】:

    【解决方案2】:

    您应该将 dir.mkdir() 替换为 duplicate.mkdir(),因为 dir 是已经存在的源目录。

    【讨论】:

    • @guywhoneedsahand 如果它回答了您的问题,您需要接受答案。
    • 我知道 - 我正在等待超时。 “你可以在 x 分钟内接受这个问题”。
    【解决方案3】:

    dir.mkdir() 只返回 true 目录是实际创建的。尝试做

    if(dir.mkdir() || dir.exists())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-18
      • 2018-02-20
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 2014-06-17
      相关资源
      最近更新 更多