dポイントプレゼントキャンペーン実施中!

お世話になっております。

現在、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オブジェクトのコンストラクタ、フォルダの書き込み権限等については問題がありません。


原因等がお分かりであればご教授のほどお願いします。

A 回答 (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/ …
    • good
    • 0

「うまくmkdirsでフォルダが作成されません。

」というのは, 具体的にはどう「うまくつくれない」んですか?
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!