• 締切済み

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

teketonの回答

  • 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

関連するQ&A

  • StringBuilderをStringに代入

    StringBuilderを使って文字列連結して、それをSQL文(String型)として利用するプログラムを作りました。 ※SQLはループ処理で約10万個ぐらい発行→実行します StringBuilderの文字列を、最終的にString型の変数(strSql)に代入するのですが、 下記のどちらで代入する方がコスト掛からないでしょうか? A案. ---------- StringBuilder sb = new StringBuilder(); sb.append(変数a); sb.append(変数b); sb.append(変数c); String sqlStr = new String(sb); ---------- B案. ---------- StringBuilder sb = new StringBuilder(); sb.append(変数a); sb.append(変数b); sb.append(変数c); String sqlStr = sb.toString(); ---------- 教えてください。

    • ベストアンサー
    • Java
  • ローカル変数を戻り値に使うと良くない C#

    C#2008で以下のように、Dumpメソッドを使った場合、 return sb.ToString();としていますが、 昔ローカル変数を戻り値に使うと良くないという 記憶があったのですが、正確なことはすっかり忘れてしまい 確か値型なら問題ないと思ったのですが、 以下の方法は正しくないでしょうか? 戻り値にこだわったのは、使えれば便利かなという程度です。 namespace Modorichi { public struct Test { public int a; public PlayInfo(string dummy) { a = -1; } public string Dump() { StringBuilder sb = new StringBuilder(); sb.Append(String.Format("a=[{0}]\n", this.a)); return sb.ToString(); } } }

  • JAVA:toStringについて

    JAVAの"toString"について教えてください。 public synchronized String format(LogRecord record) StringBuffer sb = new StringBuffer(); sb.append(日付); sb.append(":"); sb.append(record); return sb.toString(); とした場合、StringBufferが解放されないため、メモリリーク等 発生しますでしょうか? また、回避するにはどうすればよいでしょうか? お力添えを宜しくお願いします。

  • ASP.NET2.0 TreeView チェックボックス

    皆様、お世話になります。 長田と申します。 環境はASP.NET2.0です。 1.新規にWebフォームを作成して、その中にTreeViewとボタンを作成します。 2.TreeViewはチェックボックスを持つように設定。 3.ボタン押下時にTreeViewの中でチェックボックスを選択されているものを取得して、ラベルに表示。 ネットにてサンプルを見つけたのですが、C#なため解読できません。(泣く VB.NETでしたらどのようになりますでしょうか宜しければご教授頂きたく思ってます。 ご指導お願い致します。 TreeViewイメージ □大分類A  □中分類1   □小分類1   □小分類2   □小分類3  □中分類2   □小分類1   □小分類2   □小分類3 □大分類B  □中分類1   □小分類1 コード(※ツリービューを作る所は省略) //ボタン押下時 protected void Button1_Click(object sender, EventArgs e) {   System.Text.StringBuilder sb = new System.Text.StringBuilder();   //大分類   sb.Append(SelectNode(TV1.Nodes));   foreach (TreeNode tn in TV1.Nodes)   {     //中分類     sb.Append(SelectNode(tn.ChildNodes));     foreach (TreeNode tn2 in tn.ChildNodes)     {       //小分類       sb.Append(SelectNode(tn2.ChildNodes));     }   }   Label1.Text = sb.ToString(); } //ノードに日もづく子ノードで且つ選択されているものを取得 public static string SelectNode(TreeNodeCollection tnc) {   System.Text.StringBuilder sb = new System.Text.StringBuilder();   foreach (TreeNode tn in tnc)   {     if (tn.Checked)     {       sb.Append(tn.Text);     }   }   return sb.ToString(); }

  • エラーの意味を

    こんにちは。 いろいろと調べてみたんですが、どうにもわからなくて・・・。 Eclipseなんですが、 あるクラス(下記のようなクラス) public String test( MAp map ){ StringBuffer sb = new StringBuffer(); sb.append("~いろいろ~"); ~中略(これがたくさん・・・)。~ return sb.toString(); } で、エラーメッセージ メソッド test(java.util.Map) のコードが 65535 バイトの制限を超えています。 が出ます。 エラー個所はメソッドの宣言部 test( MAp map ) になっています。 StringBufferに65535バイトしか入らない・・・、という事はないですし、 何が原因なのかサッパリです・・・。 よろしくお願いします。

    • ベストアンサー
    • Java
  • avaというか文字列について少し質問です><

    avaというか文字列について少し質問です>< お願いします。 シーザー暗号で文字列をずらすためのクラスのメソッドをつくったのですが・・・ String decrypt(String str,int key) { StringBuffer sb = new StringBuffer(); // もしくはStringBuilder for(int i=0;i<str.length();i++){ char c=str.charAt(i); c=(char)((int)c-key); sb.append( c ); } こんな感じなのですがアルファベットの小文字26文字のみとしたいので暗号化や復号化の際に越えてしまう場合はアルファベット内でループさせたいのですがいまいちやり方が浮かびません><越えてしまう場合はzからひいたものを表現させれば良いかと思いやってみたのですが全然違う文字が出てきてしまいました。何かいい方法を教えてください。お願いします><

    • ベストアンサー
    • Java
  • DAOの処理についての質問です。

    DAOのデリート処理についてです。以下のコードで、DAOから削除するSQLを発行し、jspで選択したチェックボックスを削除する、という機能を実装しています。 // デリートを行うSQL文 public static String deleteQurey = "DELETE FROM TABLE_ITEM WHERE ID IN (?)"; PreparedStatement ps_; ResultSet rs_; public boolean deleteProduct(Connection con,String checkNumber[])throws Exception{ // 削除が成功又は失敗か判定するboolean型変数 boolean judge = true; try{ // ZGMFOperationのインスタンス化 ZGMFOperation raw = new ZGMFOperation(); // 配列の要素分のバインド変数をSQLに加える String sql = raw.deleteSql(deleteQurey, checkNumber); // プリペアーステートメントの生成 ps_ = con.prepareStatement(sql); for(int i = 1; i < checkNumber.length; i++){ // バインド変数に削除IDを代入する ps_.setString(i+1, checkNumber[i]); } // SQL文の発行 ps_.executeUpdate(); // 正常に完了すればコミット con.commit(); }catch(Exception e){ e.printStackTrace(); try { // 失敗した場合はロールバックを行う if(con != null) con.rollback(); // 失敗した場合はfalse judge = false; }catch(SQLException error){ throw error; } }finally{ try{ // 後処理を行う if(rs_ != null) rs_.close(); if(ps_ != null) ps_.cancel(); }catch(Exception e){ throw e; } } // 結果を返す return judge; } ここまでをDAOに記述し、以下のZGMFOperationからdeleteQureyにappendする、という処理を記述しています。 package operator; /** * 文字列操作を行うオペレーションクラス */ public class ZGMFOperation { public String deleteSql(String DELETE_QUREY,String checkNumber[]){ // StringBuilderのインスタンス生成 StringBuilder sb = new StringBuilder(); // DELETE_QUREYをシーケンスに追加 sb.append(DELETE_QUREY); // 配列の長さ分繰り返す for(int i = 1; i < checkNumber.length; i++){ // SQL文を作成 sb.append(" "); sb.append("or"); sb.append(" "); sb.append("ID"); sb.append("="); sb.append("TO_NUMBER(?)"); } return toString(); } } 当初は最初のdeleteQurey部分を public static String deleteQurey = "DELETE FROM TABLE_ITEM WHERE ID = TO_NUMBER(?)"; としていました。なので普通に削除処理は行えるのですが、TO_NUMBER(?)orTO_NUMBER(?)......というように少々無様でもあったので、上記のようにID IN(?)としました。なのでZGMFOperation部分のappendがかなり簡略化されると思い、 sb.append(","); sb.append("?"); sb.append(","); このような感じで変更してみたのですが、選択した一行しか削除する事が出来ません。間違いなくappend部分がおかしいのですが、どなたか教えて頂けないでしょうか?よろしくお願い致します。

    • ベストアンサー
    • Java
  • javaというか文字列について少し質問です><

    javaというか文字列について少し質問です>< javaというか文字列について少し質問です>< お願いします。 シーザー暗号で文字列をずらすためのクラスのメソッドをつくったのですが・・・ String decrypt(String str,int key) { StringBuffer sb = new StringBuffer(); // もしくはStringBuilder for(int i=0;i<str.length();i++){ char c=str.charAt(i); c=(char)((int)c-key); sb.append( c ); } こんな感じなのですがアルファベットの小文字26文字のみとしたいので暗号化や復号化の際に越えてしまう場合はアルファベット内でループさせたいのですがいまいちやり方が浮かびません><越えてしまう場合はzからひいたものを表現させれば良いかと思いやってみたのですが全然違う文字が出てきてしまいました。何かいい方法を教えてください。お願いします><

    • ベストアンサー
    • Java
  • StringBufferからStringへキャストする

    StringBufferからStringへキャストする方法としてどちらを用いるのが一般的なのでしょうか StringBuffer sb として public String ***(***)メソッドの最後に 1. return sb.toString()とする 2. return new String(sb)とする 私は1を使っていたのですが、 Javaの規約だか処理能力が良い方法だかに 厳しい人が2を使っていたので少し戸惑う程度ですが… 回答よろしくお願いします。

    • ベストアンサー
    • Java
  • エラー処理について

    ファイルを引数に取って、そのファイルの中身を文字列として返す自作メソッドをウェブで見つけたので、そのまま使用しようと思いました。しかし、ファイルが空ファイルの場合はこのメソッドだとエクセプションエラーになってしまうようです。どこかを変更して、メイン側で適切に処理してあげなければならないと思われるのですが、どこをどう修正すればよいでしょうか。自分で作成したものでもないので、見当がつかない状態です。。申し訳ありませんが宜しくお願いします。 public static String fileToString(File file) throws IOException { BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(new FileInputStream(file))); StringBuffer sb = new StringBuffer(); int c; while((c=br.read())!=-1) { sb.append((char) c); } return sb.toString(); } finally { br.close(); } }

    • ベストアンサー
    • Java