コンストラクタにパスを記述する方法

このQ&Aのポイント
  • コンストラクタにパスを記述する方法を教えて下さい
  • プログラムのコンストラクタの引数にディレクトリパスを指定する方法を教えてください
  • C:\Users\NEC-PCuser\ArtNameをコンストラクタの引数に記述しようとするとエラーになってしまいます
回答を見る
  • ベストアンサー

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

以下に示したプログラムのコンストラクタの引数の部分(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(); } }

noname#149152
noname#149152
  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

え? つまり, public FileList("C:\\Users\\NEC-PCuser\\ArtName") { objFile_ = objFile; } としたらエラーが出た, ってこと? そりゃ当然でしょう (「当然」と思えないなら「クラスの作り方」の解説をじっくり読み直してください). そもそも何したいの?

noname#149152
質問者

お礼

ご回答ありがとうございました。もう一度プログラムを組み直してみます。

関連する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
  • アーティスト名リストを取得するプログラムなのですが

    以下のプログラムは実行すると指定したディレクトリ下の複数のmp3ファイルからアーティスト名を取り出して表示するMainクラスのプログラムです。 例>指定したディレクトリ下にmp3ファイルが三つあり、アーティスト名が花子、次郎、花子で記されていたとすると花子、次郎、花子と表示されます。 この場合だと花子が2回表示されてしまうので同じアーティスト名の場合は重複しないように表示できるようプログラムを変更したいのですが上手く組み込むことができません(>_<) どの箇所を書き加えれば良いか教えてください。 import java.io.File; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.ArrayList; public class MP3FileListMain { /** * @param args * @throws UnsupportedEncodingException */ public static void main(String[] args) throws UnsupportedEncodingException { if(args.length < 1) { System.out.print("引数にディレクトリを指定して\n"); return; } File objFile = new File(args[0]); if(!objFile.isDirectory()) { System.out.print("引数に指定したのは、ディレクトリではない\n"); System.out.print("引数にディレクトリを指定して\n"); return; } FileList objFileList = new FileList(objFile); long lRnt = objFileList.getFileInfo(); // try { MP3Tag.init(); } catch (ClassNotFoundException e) { e.printStackTrace(); } MP3Tag.outputFiles(objFileList); } private static class MP3Tag { private static void init() throws ClassNotFoundException { } private static void outputFiles(FileList objFileList) { MP3File objMP3File; ArrayList objMP3List; // System.out.print(objFileList.getDir() + "\n"); Iterator iteMP3File = objFileList.getMP3FileIte(); while(iteMP3File.hasNext()) { objMP3File = (MP3File)iteMP3File.next(); try { objMP3List = objMP3File.getMP3Info(); } catch (Exception e) { e.printStackTrace(); return; } try { for(int i = 0; objMP3List.size() > i; i++) { MP3Info objMP3Info = (MP3Info)objMP3List.get(i); System.out.print(objMP3Info.getArtist() + ","); } } } catch (Exception e) { e.printStackTrace(); return; } } Iterator iteDir = objFileList.getDirIte(); while(iteDir.hasNext()) { outputFiles((FileList)iteDir.next()); } } } }

    • ベストアンサー
    • Java
  • プログラム実行できません。

    複数のMP3ファイルからタグ情報を取り出すプログラムなのですがMainクラスを実行すると引数にディレクトリを指定してと表示されてしまいます。どの箇所の引数にディレクトリのパスを記述すれば取り出せるのかご教授お願い致します。直、プログラム大きく分けて6つあります。 以下がMainプログラムになります。 **FileList objFileList = new FileList();の括弧の中にディレクトリパスを指定して実行してみましたが引数にディレクトリに指定してと表示されてしまいます。** /** * ID3Tag取得プログラム:MP3FileListMainクラス * Mainクラス **/ import java.io.File; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.ArrayList; public class MP3FileListMain { /** * @param args * @throws UnsupportedEncodingException */ public static void main(String[] args) throws UnsupportedEncodingException { if(args.length < 1) { System.out.print("引数にディレクトリを指定して\n"); return; } File objFile = new File("args[0]"); if(!objFile.isDirectory()) { System.out.print("引数に指定したのは、ディレクトリではない\n"); System.out.print("引数にディレクトリを指定して\n"); return; } FileList objFileList = new FileList(objFile); /*このobjFileの部分にパスを指定したんですけど*/ long lRnt = objFileList.getFileInfo(); // System.out.print(lRnt); try { MP3Tag.init(); } catch (ClassNotFoundException e) { e.printStackTrace(); } MP3Tag.outputFiles(objFileList); } private static class MP3Tag { private static long lSeriesNo_ = 0; private static long lMaxSeriesNo_ = 0; private static long lFileNo_ = 0; private static long lMaxFileNo_ = 0; private static long lTypeNo_ = 0; private static SimpleDateFormat sdf_; private static int handle1_; private static int handle2s_; private static int handle21s_; private static int handle22s_; private static int handle2i_; private static int handle3s_; private static int handle3i_; private static int handle3u_; private static void init() throws ClassNotFoundException { sdf_ = new SimpleDateFormat("yyyyMMddHHmmss"); } private static void outputFiles(FileList objFileList) { int handle = 0; long lSeriesNo = lSeriesNo_; MP3File objMP3File; ArrayList objMP3List; // System.out.print(objFileList.getDir() + "\n"); Iterator iteMP3File = objFileList.getMP3FileIte(); while(iteMP3File.hasNext()) { objMP3File = (MP3File)iteMP3File.next(); try { objMP3List = objMP3File.getMP3Info(); } catch (Exception e) { e.printStackTrace(); return; } try { for(int i = 0; objMP3List.size() > i; i++) { System.out.print(lFileNo_ + ","); System.out.print(lTypeNo_ + ","); System.out.print(lSeriesNo + ","); MP3Info objMP3Info = (MP3Info)objMP3List.get(i); System.out.print(objMP3Info.getLastModified() + ","); System.out.print(objMP3Info.getFileSize() + ","); System.out.print(objMP3Info.getTagVersion() + ","); System.out.print(objMP3Info.getTrackNo() + ","); System.out.print(objMP3Info.getTitle() + ","); System.out.print(objMP3Info.getGenre() + ","); System.out.print(objMP3Info.getArtist() + ","); System.out.print(objMP3Info.getComment() + ","); System.out.print(objMP3Info.getYear() + ","); System.out.print(sdf_.format(new Date()) + ","); System.out.print(objMP3Info.getPath() + ","); System.out.print(objMP3Info.getFileName() + "\n"); } } catch (Exception e) { e.printStackTrace(); return; } lFileNo_++; } Iterator iteDir = objFileList.getDirIte(); while(iteDir.hasNext()) { outputFiles((FileList)iteDir.next()); } } } }

  • 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
  • ID3タグの情報を取得したいのですが・・・・

    指定したディレクトリ以下にある複数のMP3ファイルからID3タグの情報(アーティスト・作成年・曲名)など表示するプログラムなのですが、実行すると”引数にディレクトリを指定して”と言う表示が返されてしまいます。このプログラムのどの個所にディレクトリを指定する記述をすれば指定したディレクトリ以下のMP3ファイルからID3タグの情報を表示させることができるか教えてください。(>_<) プログラムは大きく分けて      [ID3TagのVer1.0/1.1取得するクラス]       [ID3TagのVer2.3 取得するクラス]      [ID3TagのVer1.0/1.1とVer2.3 取得クラスのスーパークラス]      [指定ディレクトリ以下のファイル一覧を取得するクラス]      [ID3TagのVer1.0/1.1とVer2.3 取得クラスを取得・保持するクラス]      [ID3Tag取得プログラムするMainクラス]                                             から構成されています。 <以下に示すのがMainクラスのプログラムです。> import java.io.File; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.ArrayList; public class MP3FileListMain { /** * @param args * @throws UnsupportedEncodingException */ public static void main(String[] args) throws UnsupportedEncodingException { if(args.length < 1) { System.out.print("引数にディレクトリを指定して\n"); return; } File objFile = new File(args[0]); if(!objFile.isDirectory()) { System.out.print("引数に指定したのは、ディレクトリではない\n"); System.out.print("引数にディレクトリを指定して\n"); return; } FileList objFileList = new FileList(objFile); long lRnt = objFileList.getFileInfo(); // System.out.print(lRnt); try { MP3Tag.init(); } catch (ClassNotFoundException e) { e.printStackTrace(); } MP3Tag.outputFiles(objFileList); } private static class MP3Tag { private static long lSeriesNo_ = 0; private static long lMaxSeriesNo_ = 0; private static long lFileNo_ = 0; private static long lMaxFileNo_ = 0; private static long lTypeNo_ = 0; private static SimpleDateFormat sdf_; private static int handle1_; private static int handle2s_; private static int handle21s_; private static int handle22s_; private static int handle2i_; private static int handle3s_; private static int handle3i_; private static int handle3u_; private static void init() throws ClassNotFoundException { sdf_ = new SimpleDateFormat("yyyyMMddHHmmss"); } private static void outputFiles(FileList objFileList) { int handle = 0; long lSeriesNo = lSeriesNo_; MP3File objMP3File; ArrayList objMP3List; // System.out.print(objFileList.getDir() + "\n"); Iterator iteMP3File = objFileList.getMP3FileIte(); while(iteMP3File.hasNext()) { objMP3File = (MP3File)iteMP3File.next(); try { objMP3List = objMP3File.getMP3Info(); } catch (Exception e) { e.printStackTrace(); return; } try { for(int i = 0; objMP3List.size() > i; i++) { System.out.print(lFileNo_ + ","); System.out.print(lTypeNo_ + ","); System.out.print(lSeriesNo + ","); MP3Info objMP3Info = (MP3Info)objMP3List.get(i); System.out.print(objMP3Info.getLastModified() + ","); System.out.print(objMP3Info.getFileSize() + ","); System.out.print(objMP3Info.getTagVersion() + ","); System.out.print(objMP3Info.getTrackNo() + ","); System.out.print(objMP3Info.getTitle() + ","); System.out.print(objMP3Info.getGenre() + ","); System.out.print(objMP3Info.getArtist() + ","); System.out.print(objMP3Info.getComment() + ","); System.out.print(objMP3Info.getYear() + ","); System.out.print(sdf_.format(new Date()) + ","); System.out.print(objMP3Info.getPath() + ","); System.out.print(objMP3Info.getFileName() + "\n"); } } catch (Exception e) { e.printStackTrace(); return; } lFileNo_++; } Iterator iteDir = objFileList.getDirIte(); while(iteDir.hasNext()) { outputFiles((FileList)iteDir.next()); } } } }

    • ベストアンサー
    • Java
  • javaでコンパイルが出来ない

    java勉強中の初心者です。 カレントディレクトリのファイルを一覧表示するプログラムを作ろうと思い、下のようなコードを書いたのですが、 「構文解析中にファイルの終わりに移りました」というエラーが出ます。 何度か見直したんですが、コードが間違っているのか、どこか別に問題があるのかわかりません。 教えてください。よろしくお願いします。 ________________________________________________________________ import java.io.File; public class ListFiles { public static void main(String[] args) { ListFiles listFiles = new ListFiles(); listFiles.execute(); } private void execute() { File currentDir = new File("."); File[] files=currentDir.listFiles(); for (File file : files) { String fileName = file.getName(); String kind; if (file.isDirectory()) { kind="DIR "; }else{ kind="FILE"; } System.out.printf("%s %s%n", kind, fileName); } }

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

    以前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
  • Iteratorの使い方でこまっています。

    こんにちは、片岡と言います。 Iteratorの使い方で困っています。 次のプログラムで自分の望んだ結果と違う動作をします。 原因やもっと良い方法をご存知の方はいませんか。 私の行った手順は以下です。 (1)次のようなプログラムを作りました。 import java.util.ArrayList; import java.util.Iterator; public class Main { ArrayList list; public static void main(String[] args) { Main instance = new Main(); Iterator it = instance.getIterator(); for (int i = 0; i < 3; i++) { Iterator temp = it; //Iterator temp = instance.getIterator(); while (temp.hasNext()) { System.out.print(temp.next()); } System.out.println(""); } } public Main() { list = new ArrayList(); list.add("a"); list.add("b"); list.add("c"); } public Iterator getIterator() { return list.iterator(); } } (2)このプログラムを実行しました。 abc (3)しかし、私の望んだ実行結果は、次のようなものでした。 abc abc abc (4)プログラムを次のように変更しました。 Iterator temp = it; の行を Iterator temp = instance.getIterator(); に変更しました。 変更後は、私の望んだ実行結果になります。 なぜ、Iterator temp = it では駄目なのでしょうか。 また、何度もIteratorを生成すると、処理が重くなる気がします。 もっと良い方法はないのでしょうか。 ご存知の方はいらっしゃいませんか。 なお、私の環境は以下の通りです。 OS: Microsoft Windows XP Professional SP2 開発環境:Eclipse 3.2.2 java: java version "1.4.2_13"

    • ベストアンサー
    • Java
  • ディレクトリの階層構造をツリー表示したい

    指定したディレクトリ以下のディレクトリの階層構造を、ツリー表示するプログラムを作りたいと思っています。 階層構造は、階層が下がるごとにインデントをつけてツリー表示したいと思っています。 指定ディレクトリ以下のディレクトリ名をすべて表示させるところまではできたのですが、インデントをうまくつけられずに困っています。 ソースは以下のようにしました。 ---------------------------------- import java.io.File; public class DirTree { String dirName; void showDirName(){ File directory = new File(dirName); File[] subFiles = directory.listFiles(); for (int i = 0; i < subFiles.length; i++) { if(subFiles[i].isDirectory()==true) { System.out.println(subFiles[ i ].getName() ); dirName = subFiles[ i ].getPath(); showDirName(); } } } } --------------------------------------------- 何かよい方法や、ここをこうしたらと言うのがありましたら教えていただけませんでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • ArrayListを使った多次元配列の比較方法

    JAVAでArrayListを使った多次元配列の要素を比較方法で困っています。 下記のコードで、アイテム、数量、金額をランダムに10個配列に追加しています。 private ArrayList<Item> list; public ArrayList<Item> getItems1() { return list; } public void setItems(ArrayList<Item> items) { getItems(); } public Inventory() { list = new ArrayList<Item>(); } public void getItems(){ for(int i =0; i<10; i++){ int theItemType = (int)(Math.random()*6+1); int theQut = (int)(Math.random()*20+1); int thePrice = (int)(Math.random()*40+101)/20; list.add(new Item(theItemType, theQut, thePrice)); } } public String getItemName() { if(itemType == 1){ return "シャツ"; } if(itemType == 2){ return "スカート"; } if(itemType == 3){ return "ズボン"; } if(itemType == 4){ return "ネクタイ"; } if(itemType == 5){ return "靴"; } if(itemType == 6){ return "靴下"; } return null; } public String toString() { return getItemName() + " , " + getQut() + " " + getPrice(); } 同じアイテム、金額の場合は、数量を合計して表示させたいです。例えば、配列の要素が下記のような場合、1つ目と2つ目の要素は同じアイテム、金額になるので、数量を20として表示させたいのですが、どのように比較していいのかわかりません。どなたか教えてください。よろしくお願いします。 靴下 , 4, 5 靴下 , 16, 5 ネクタイ , 3, 5 ネクタイ , 16, 6 ネクタイ , 2, 6 ズボン , 16, 6 ズボン , 15, 6 スカート , 3, 6 靴 , 17, 7 シャツ , 17, 7

    • ベストアンサー
    • Java

専門家に質問してみよう