• 締切済み

mkdirsでフォルダが作成されない

お世話になっております。 現在、javaにてファイルからフォルダの階層情報を読み取り 所定のパスに取得したフォルダ構成を作成するバッチの作成をしているのですが、 Fileオブジェクトのmkdirsメソッドを使用してもうまくフォルダが作成されません。 //呼び出し元メソッド public static void main(String[] args) { List<String> fldList = new ArrayList(); //フォルダ情報の取得は成功しているので割愛 Enumeration enu = Enumeration取得メソッド。 while(enu.hasMoreElements()) { fldList.add(enu.nextElement().toString()); makeFld(fldList); } } //--------フォルダ作成メソッド private static void makeFld(List<String> fldList) throws Exception { StringBuilder sb = new StringBuilder(); sb.append(targetDir); try { for(int i = 1; i < fldList.size() ; i++) { sb.append("\\"); sb.append(fldList.get(i).toString()); } File outputFld = new File( sb.toString().trim() ); if(!outputFld.exists()) { outputFld.mkdirs(); if(outputFld.exists()) { System.out.println("フォルダの作成に成功しました"); } } else { System.out.println("ファイルが既に存在します。"); } } catch(Exception e ) { throw e; } } 一度目の呼び出しでは 「c:\foldercreate\targetdir\dir1」 といったようなパスになっておりうまくフォルダが作成されるのですが 二度目の呼び出しで 「c:\foldercreate\targetdir\dir1\category1」 といったようなフォルダパスをFileオブジェクトのコンストラクトに渡しても うまくmkdirsでフォルダが作成されません。 Fileオブジェクトのコンストラクタ、フォルダの書き込み権限等については問題がありません。 原因等がお分かりであればご教授のほどお願いします。

みんなの回答

  • teketon
  • ベストアンサー率65% (141/215)
回答No.2

省略されている取得されたフォルダ構成が、どのように入っているかわかりません。 そのため、どのようにその情報を参照すればいいか、またどの順序でフォルダを作成すべきかかわかりません。 それで作ってみました。java7以降のFileVisitorを使っています。 -----実行前(AAAの配下のフォルダ構成を、BBB以下に作成する)  test   AAA    AAAA    AAAB     AAABA   BBB -----実行後  test   AAA    AAAA    AAAB     AAABA   BBB    AAAA    AAAB     AAABA --------- public class Test{ public static void main(String[] args) throws IOException{ final Path srcDir = FileSystems.getDefault().getPath("test/AAA"); final Path distDir = FileSystems.getDefault().getPath("test/BBB"); Files.walkFileTree(srcDir,new SimpleFileVisitor<Path>(){ @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { if(srcDir.equals(dir))return FileVisitResult.CONTINUE; //** test/AAA から test/AAA/AAAB/AAABAへの相対パス(AAAB/AAABA)を取得する String src = srcDir.relativize(dir).toString(); //** 取得した相対パスを満たすファルダをtest/BBB以下に作成する new File(distDir.toFile(),src).mkdir(); return FileVisitResult.CONTINUE; } }); } }

参考URL:
http://docs.oracle.com/javase/jp/7/api/java/nio/file/FileVisitor.html
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「うまくmkdirsでフォルダが作成されません。」というのは, 具体的にはどう「うまくつくれない」んですか?

すると、全ての回答が全文表示されます。

関連するQ&A