お世話になっております。
研修課題で、Windows コマンドプロンプトのtree/f にあたるプログラムを現在 Java で作成中です。
下記のようなソースコードはできました。
ですが、
boolean型の配列を用いるのは、メモリの無駄なので、
Listの add , set , remove 等を使ってやり直すよう指示を受けております。
以下、該当のソースコードです。
import java.io.*;
public class FileSearch{
public static void readDir(File dir, int depth , boolean[] ancestor){
File[] files = dir.listFiles(); //一覧を出力するループ for(int i = 0; i< files.length; i++){ // 階層に従いインデント処理するループ for(int j = 0; j < depth; j++){ if(ancestor[j] == true){ System.out.print("|"); }else{ System.out.print(" "); } System.out.print(" "); } // 個別ファイル、またはディレクトリの表示 if( i != files.length -1){ //次にまだファイルまたはディレクトリが存在する System.out.print("├─ "); //そのフラグを立てる ancestor[depth] = true; }else{ //もう次にファイルまたはディレクトリは存在しない System.out.print("└─ "); //そのフラグを立てる ancestor[depth] = false; } // 対象のファイル名、ディレクトリ名の表示 System.out.println(files[i].getName()); File file = files[i]; //ディレクトリの場合は、さらに一階層潜って再帰的に探索 if(file.isDirectory()){ readDir( file, depth + 1,ancestor); } } } //メインメソッド public static void main(String[] args){ //ディレクトリ指定 String path = "C:\\.txt"; //階層の指定(512あればまずは大丈夫か) boolean[] ancestor = new boolean[512]; // falseで初期化 for(int i=0; i<ancestor.length; i++){ ancestor[i] = false; } // 実行 System.out.println("フォルダー パスの一覧"); System.out.println("C:."); readDir(new File(path),0, ancestor); }
}
###試したこと
メインメソッドで 配列を宣言している箇所を
ArrayList<Boolean> ancestor = new ArrayList<Boolean>(); に、
メソッドの引数 boolean[] ancestor となっている部分を
ArrayList<Boolean> ancestor にして、
以下、3箇所をどう処理するかがポイントかと思っております。
// 階層に従いインデント処理するループ 内の
if( ancestor[j] == true)
// フラグを立てる
ancestor[depth] = true;
ancestor[depth] = false;
上記の部分を、add や set 等を使いながら、
トライ&エラーを繰り返している状況です。
どう処理すればよいかご教示いただけますと、幸いです。
何とぞよろしくお願いいたします。、
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/06/14 15:26 編集