- 締切済み
プログラム実行できません。
複数の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()); } } } }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
いうべきことは #1 で尽きている感はありますが, 「質問の書き方」について 1点指摘しておきます. 「Mainクラスを実行すると引数にディレクトリを指定してと表示されてしまいます」というのが「期待した動作でない」というなら (もっとも, 期待した通りの動作ならわざわざ質問しないとは思いますが) 「どのように実行したのか」「どのように表示されたのか」を正確に記述してください. 「あなたがどのように実行したのか」を知っているのは, あなただけですよ.
- Wr5
- ベストアンサー率53% (2173/4061)
基本、C言語くらいしか出来ませんが…… もう少し、基礎を勉強した方がよろしいかと。 >File objFile = new File("args[0]"); どういう動作を期待していますか? javaプログラム名が入って同じディレクトリに置いてあるMP3ファイルが処理されるんだ♪ とか思っていたりします?? >Mainクラスを実行すると引数にディレクトリを指定してと表示されてしまいます。どの箇所の引数にディレクトリのパスを記述すれば取り出せるのかご教授お願い致します。 「Java コマンドライン引数」あたりで検索して下さい。 >public static void main(String[] args) throws UnsupportedEncodingException { >if(args.length < 1) { >System.out.print("引数にディレクトリを指定して\n"); が、なにをしているのか…というのが判れば、 >FileList objFileList = new FileList(objFile); /*このobjFileの部分にパスを指定したんですけど*/ なんてことは見当違いであるコトが判るでしょう。 まあ、処理するファイルのあるディレクトリを指定できなくてもいいのさ~♪ なんて言うのであれば、固定でパスを指定してもいいでしょうけど。 それでも… >if(args.length < 1) { と判定している以上はコマンドライン引数が必要ですけどね。 ちなみに、プログラムは実行できていますよ。 それ故、「引数にディレクトリを指定して」と表示されているハズです。 よく言われるコトですが… 「プログラムは望む通りには動かない。(ソースに)書かれている通りに忠実に動く」んです。