• 締切済み

フォルダ検索

初めまして宜しくお願い致します。 当方、C言語しか経験がなく、Javaは全くの初心ですが Javaで以下のことを行いたく、プログラムを組んだのですが うまく動作しません。 <処理内容> 特定のフォルダ配下を検索して、フォルダ名(List型)とファイル名(String)を返却する。 SerchFolder |-------- FolderAAA | |----- FolderBBB | |-----FileCCC | |-------- FolderXXX | |----- FolderYYY | |-----FileZZZ <検索対象フォルダ:SerchFolder> 検索結果格納クラス(ContentsConst クラス配列型) メンバ変数 ArrayList型 key; メンバ変数 String型 num; 上記フォルダの検索結果は以下の通りになるようにしたい。 ContentsConst[0] keyに、{FolderAAA, FolderBBB} numに、"FileCCC" ContentsConst[1] keyに、{FolderXXX, FolderYYY} numに、"FileZZZ" <コード例> // 検索結果格納クラス public class ContentsConst { public ArrayList key; public String num; } public class ContentsManagement { // フォルダ検索メソッド public ContentsConst[] read(String filepath){ // 検索結果格納配列型クラス ContentsConst[] ContentsKey = new ContentsConst[10001]; File idir = new File(filepath); // 検索対象ディレクトリ(SerchFolder)以下の一覧を取得 File[] filelist = idir.listFiles(); // 検索対象ディレクトリ(SerchFolder)以下分ループする for (int i = 0 ; i < filelist.length ; i++){ // フォルダ名一時格納用 ArrayList ContentsWork = new ArrayList(); // 処理省略 //検索し、Dirならば Dir名(FolderAAA) 格納 ContentsWork.add(filelist[i].getName()); // 処理省略 //検索し、Dirならば Dir名(FolderBBB) 格納 ContentsWork.add(filelist2[i].getName()); // 処理省略 //検索し、fileならば file名(FileCCC) 格納 if (filelist3[k].isFile()){ // Dir を順番に格納するためのループ for(int l =0; l<ContentsWork.size(); l++){ // "注意" 一時格納用のList⇒ // 配列型クラスに値をコピーしようとするが、 // エラーとなり、コピーできない // "ecllips のエラー "ソースが見つかりませんでした。"" ContentsKey[i].key.add(ContentsWork); } // "注意" 一時ワークとして、String型の変数に格納して、 // コピーしようとするものの上記同様のエラーが出力される String str = filelist3[k].getName(); ContentsKey[i].num = str ; }else if (filelist3[k].isDirectory()){ // ディレクトリだった時は対象外 break; } かなりCライクなプログラミングで、Javaっぽくないのは重々承知しております。 そのへんについても、ご意見が頂ければ、幸いです。

みんなの回答

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

まず、提示された図ですが、SerchFolder内にFolderAAAとFolderXXXがあり、FolderAAA内にFolderBBBとFileCCCがあると考えてよろしいのでしょうか。 また、、検索対象が以下のような場合の結果はどうなるのが望ましいとお考えでしょうか。 (1) SerchFolder |-------- FolderAAA | |----- FolderBBB | | |----- FolderCCC | | |-----FileDDD (2) SerchFolder |-------- FolderAAA | |----- FolderBBB | |-----FileCCC | |-----FileDDD

javastarter
質問者

お礼

自己解決できました ありがとうございました

javastarter
質問者

補足

ご返答ありがとうございます。 >>SerchFolder内にFolderAAAとFolderXXXがあり、FolderAAA内にFolderBBBとFileCCCがあると考えてよろしいのでしょうか。 ご認識通りです。 >>また、、検索対象が以下のような場合の結果はどうなるのが望ましいとお考えでしょうか。 検索対象フォルダ\フォルダAAA\フォルダBBB\ファイルCCC 上記形式以外のフォーマット以外は無視する、もしくはフォーマットエラーにするため、検索結果には格納しないものと考えております。 (1) key={FolderAAA, FolderBBB} num="FileCCC" ※同階層に別ファイルもあった場合は、一番最初に見つかったファイル名を一つだけ格納する (2) 上記理由から、検索結果には格納しない。 ご不明点等があれば、お尋ね下さい。 よろしくお願い致します。

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

関連するQ&A

  • プログラムを実行させたいのですが・・・・・

    複数のMP3ファイルからタグ情報を取り出すプログラムなのですがMainクラスを実行すると引数にディレクトリを指定してと表示されてしまいます。どの箇所の引数にディレクトリのパスを記述すれば取り出せるのかご教授お願い致します。直、プログラム大きく分けて6つあります。      <ID3V1Infoクラス>      <ID3V2Infoクラス>      <MP3FileクラスID3TagのVer1.0/1.1とVer2.3 取得クラスを取得・保持するクラス>      <MP3InfoクラスID3TagのVer1.0/1.1とVer2.3 取得クラスのスーパークラス>      <MP3FileListMainクラスMainクラス>       <FileListクラス指定ディレクトリ以下のファイル一覧を取得するクラス>のプログラムは以下のようになります。 /** * ID3Tag取得プログラム:FileListクラス * 指定ディレクトリ以下のファイル一覧を取得するクラス */ import java.io.File; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Iterator; public class FileList { private ArrayList objMp3FileList = null; private ArrayList objDirList = null; private File objFile_; public FileList(File objFile) { objFile_ = objFile; } public long getFileInfo() throws UnsupportedEncodingException { if(objFile_ == null) { System.out.print("Argment is null.\n"); return -1; // error } String strCurrentPath = objFile_.toString(); if(!objFile_.isDirectory()) { System.out.print("This Path is not Directry. :" + strCurrentPath + "\n"); return -1; } objMp3FileList = new ArrayList(); objDirList = new ArrayList(); for(int i = 0; objFile_.listFiles().length > i; i++) { if(objFile_.listFiles()[i].isDirectory()) { FileList objFileList = new FileList(objFile_.listFiles()[i]); objFileList.getFileInfo(); objDirList.add(objFileList); } else if(objFile_.listFiles()[i].isFile()) { MP3File objMP3File = new MP3File(objFile_.listFiles()[i]); objMP3File.getMP3Info(); objMp3FileList.add(objMP3File); } } return 0; } public Iterator getMP3FileIte() { return objMp3FileList.iterator(); } public Iterator getDirIte() { return objDirList.iterator(); } public String getDir() { return objFile_.getPath(); } }

    • ベストアンサー
    • Java
  • C++ ファイル列挙について

    以下のコードで指定のファイルを検索し、フルパスで配列に格納しています。 このとき、ファイル名のみ(パスと拡張子無し)で格納する方法はありますでしょうか。 どうかよろしくお願いします。 // enum_files.cpp // compile with: /clr using namespace System; using namespace System::IO; int main() { String^ folder = "C:\\"; array<String^>^ dir = Directory::GetDirectories( folder ); Console::WriteLine("--== Directories inside '{0}' ==--", folder); for (int i=0; i<dir->Length; i++) Console::WriteLine(dir[i]); array<String^>^ file = Directory::GetFiles( folder ); Console::WriteLine("--== Files inside '{0}' ==--", folder); for (int i=0; i<file->Length; i++) Console::WriteLine(file[i]); return 0; }

  • コンストラクタにパスを記述する方法を教えて下さい

    以下に示したプログラムのコンストラクタの引数の部分(File objFile)にディレクトリパスである C:\Users\NEC-PCuser\ArtNameを記述したいのですがエラーになってしまいます。どのように記述すれば引数にディレクトリパスを指定することができるかご教授お願いいたします。 以下がプログラムになります。 /** * ID3Tag取得プログラム:FileListクラス * 指定ディレクトリ以下のファイル一覧を取得するクラス */ import java.io.File; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Iterator; public class FileList { private ArrayList objMp3FileList = null; private ArrayList objDirList = null; private File objFile_; public FileList(File objFile) { /*public FileList("C:\\Users\\NEC-PCuser\\ArtName") */ objFile_ = objFile; /*↑↑のように記述するとエラーになります。↑↑*/ } public long getFileInfo() throws UnsupportedEncodingException { if(objFile_ == null) { System.out.print("Argment is null.\n"); return -1; // error } String strCurrentPath = objFile_.toString(); if(!objFile_.isDirectory()) { System.out.print("This Path is not Directry. :" + strCurrentPath + "\n"); return -1; } objMp3FileList = new ArrayList(); objDirList = new ArrayList(); for(int i = 0; objFile_.listFiles().length > i; i++) { if(objFile_.listFiles()[i].isDirectory()) { FileList objFileList = new FileList(objFile_.listFiles()[i]); objFileList.getFileInfo(); objDirList.add(objFileList); } else if(objFile_.listFiles()[i].isFile()) { MP3File objMP3File = new MP3File(objFile_.listFiles()[i]); objMP3File.getMP3Info(); objMp3FileList.add(objMP3File); } } return 0; } public Iterator getMP3FileIte() { return objMp3FileList.iterator(); } public Iterator getDirIte() { return objDirList.iterator(); } public String getDir() { return objFile_.getPath(); } }

    • ベストアンサー
    • Java
  • ディレクトリを予め指定した場合のファイル管理ツールについて

    以前BLUEPIXYさんに、ファイル管理ツールのPGを作って頂きました。 ディレクトリ名を入力し、そのファイル名一覧をリストに表示するものです。(下記のPGです) もし1つの定まったでディレクトリ内で、指定した文字列を含むファイル名一覧を表示するとしたら、こちらのPGをどう変化させればよいでしょうか? (BLUPIXYさん作) import java.io.File; import java.awt.*; import java.awt.event.*; class FileList extends Frame implements ActionListener { Label lb1; TextArea aTextArea; TextField folderField ; public FileList(String title){ super(title); setLayout(new FlowLayout()); lb1 = new Label("フォルダーパス:", Label.RIGHT); add(lb1); folderField = new TextField(40); folderField.addActionListener(this); add(folderField); aTextArea =new TextArea("", 20, 80, TextArea.SCROLLBARS_BOTH); add(aTextArea); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } public void actionPerformed(ActionEvent e){ String folderStr; if(e.getSource() == folderField) { //Enter folderStr = folderField.getText(); File dir = new File(folderStr); File[] files = dir.listFiles(); aTextArea.setText(""); for(int i=0;i<files.length;i++) { aTextArea.append(files[i].getName() + (files[i].isDirectory() ? "\\\n": "\n" )) ; } } } } public class Filekanri { public static void main(String args[]){ FileList aFileList = new FileList("ファイル一覧"); aFileList.setSize(640,480); aFileList.setVisible(true); } }

    • ベストアンサー
    • Java
  • 教えてください(>_<)

    以下のプログラムをコンパイルすると シンボル:変数 ture 場所:movemのクラス    return ture; とエラーになります。 プログラムの行う処理はすべてtureとして処理を行い戻り値としてtureを返すようにしたいです。この場合falseは考えないとします。どうすればコンパイルできるか教えてください(>_<) プログラムは以下になります。 import java.io.File; class movem{ public boolean movemusic(File[]filelist,String Artname){ int j; File dir = new File("C:\\Users\\NEC-PCuser\\Artist Folder"+"Artname"); dir.mkdir(); for(j=0;j<filelist.length;j++){ filelist[j].renameTo(new File("C:\\Users\\NEC-PCuser\\Artist Folder"+"Artname",filelist[j].getName())); } return ture; } }

  • JAVAの学習で行き詰ってしまいました。

    現在JAVAの学習を行っています。 課題で行き詰ったので質問をさせていただきます。 私が作成しようとしているプログラムは JAVA言語を使って指定したディレクトリ内に存在する ファイルやディレクトリを全てCSVファイルに出力するといったプログラムです import java.io.*; //指定したディレクトリ内に存在するファイルを表示するプログラム public class fileIn { public static void main(String args[]) throws IOException { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader kbd = new BufferedReader(isr); String path; path = kbd.readLine(); File cdirectory = new File(path); //ディレクトリかファイルはを判定し、 //ディレクトリの場合、そのディレクトリの中身を確認 //ファイルの場合、ファイル名を表示 File filelist[] = cdirectory.listFiles(); for(int i =0; i<filelist.length;i++) { if(filelist[i].isDirectory()){ System.out.println("[ディレクトリ]" + filelist[i].getName()); }else if(filelist[i].isFile()){ System.out.println("[ファイル]" + filelist[i].getName()); }else{ System.out.println("不明ファイル" + filelist[i].getName()); } System.out.println(filelist[i]); } } } 現在ここまでは出来ているのですがif文でディレクトリかファイルか判定する所まで 出来上がりましたが、ディレクトリだった場合、そのディレクトリの中を見ることが 出来ません。どのようにしたら良いでしょう。CSVファイルに出力結果を書き込む 方法もわかりません。教えてください。

    • ベストアンサー
    • Java
  • 最新のファイルのみ検索

    サーバー内のファイルを検索するのにKentWebさんのwwwsrch.cgiを利用しています。 # # すべてのファイルをなめ回す # sub search1 { local($dir) = $_[0]; local(@filelist, $file, $filename); opendir(DIR, $dir); @filelist = readdir(DIR); closedir(DIR); foreach $file (@filelist) { if ($file eq ".") { next; } if ($file eq "..") { next; } $filename = "$dir/$file"; if (-d $filename) { if ($recursive_flag) { &search1($filename); } } else { &search2($filename, $dir); } } } # # ファイルの中身を検索する # # 指定していない拡張子のファイルは無視する $suffix = ".html .cgi .pl"; $fname = substr($target, rindex($target, ".")); if ($suffix{$fname} != 1) { return; } ↑の条件に30日以上古いファイルを無視するように改造することはできないでしょうか? 検索対象ファイルが数十万以上と莫大に増加してきたため、最新のファイルのみ検索対象にできればと考えております。

    • ベストアンサー
    • Perl
  • 九九の表の応用

    Java勉強中の超初心者です。 ちょっと前に同じ質問をしたのですが、前回の回答をよく見たら 趣旨とは違った処理をしていたのでもう一度、質問をさせて下さい。 ArrayListを使った九九の表を作成します。 この時に、九九の計算結果を一旦、Stringの配列に格納してから、 ArrayListから値を出力します。 この時にArrayListに格納してから出力するソースは書くことが できたのですが、一旦、格段はString[]s = new String[9];として Stringの配列に格納してから、ArrayListにまとめて出力する方法 をご教授お願いできますか? ----------------------------------------------------------- ArrayList list = new ArrayList(); //ここにString[]s = new String[9];が入ります。 for(int i = 1; i <= 9; i++ ){ for(int j = 1; j <= 9; j++){ list.add(i*j); System.out.print(list.get(list.size() - 1) + " "); if((list.size() - 1) % 9 == 8 && (list.size() - 1) != 0){ System.out.println(""); } } } ---------------------------------------------------------- 上記のソースを元に作成できたらと、思います。

    • ベストアンサー
    • Java
  • C# 配列の配列(多次元配列?)

    C#において、配列の配列中に格納した値を、検索することを 行いたいのですが、格納した値そのものを見ることができません。 まだ、C#を始めて間もないので、配列に格納する時点で、 不備があるかも知れませんが、お願いします。 やりたいこと ・テキストファイル内にある値を、2次元配列または、多次元配列に格納 ・配列に格納した値で、データチェックなどを行う予定  テキストファイル内のデータは、下記内容となり要素数も固定ではなく変動する   A=1,2,3・・・   B=11,22,33・・・ 実際のソースは、 //配列 ArrayList list = new ArrayList(); //配列格納 1レコード毎用 ArrayList listtmp = new ArrayList(); while ((strGenderTextLine = objReader.ReadLine()) != null) {  string strBuffer;  //「=」前の値格納用変数  string[] strBuffer2; //「=」後の値格納用配列  listtmp=null;  //strtmpに「=」前の値を格納  strtmp = TextLine.Split('=').GetValue(0).ToString();  //strtmp2に「=」後の値を格納(配列)  strtmp2 = TextLine.Split('=').GetValue(1).ToString().Split(',');  for (int i = 0; i <= strtmp2.Length - 1; i ++)  {   //[i,0]に、「=」前の値を代入   if (i == 0)   {   listtmp.Add(strtmp);   }   else   {   listtmp.Add(strtmp2[i].ToString());   }  }  //list配列にlistTmp配列を格納(配列の配列)  list.Add(listtmp);  intT = intT + strtmp2.Length;  //行数カウント  intTLine = intTLine + 1;  } ここから、配列「list」内に入っている値を閲覧することができる方法を教えていただければと思います。 宜しくお願いいたします。

  • VB6.0 FileListBoxでフォルダ表示

    VB6.0 ファイルシステムコントロールを使用して各ListBox (DriveList/DriList/FileList)を組み合わせています。 この内、DriListで選択したフォルダのファイル表示に File1.Path = Dir1.Path をDir1のChange時に入れています。 このままだと、Dir1選択でFile1にファイルのみが表示されます。 これをこの中に含まれるフォルダも表示させることは 出来ないでしょうか? ご教授願います。 (ステートメントなどを記述していただけると助かります)

このQ&Aのポイント
  • 資格を持たない従業員が多い会社に転職しましたが、この状況は異常です。
  • 周りの先輩たちも無免許で仕事をしているため、資格を取ったとしても自分だけが浮いてしまいます。
  • 会社としてはこの状態がおかしいと思いますが、どのような対応をとるべきでしょうか?
回答を見る