• 締切済み

Vectorの使用法

現在、課題の作成中なんですけどうまくいかないので教えてください。 ファイルに表示されているアクセスログファイルを別のファイルに表示させるコードなんですが、 import java.util.*; import java.io.*; public class AccessLog{   public static void main(String args[]){     if(args.length != 1){  System.exit(0);     }     String filename = args[0];     Vector vector = new Vector();     try{      String line ; BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(filename))); while((line = reader.readLine()) != null){ vector.addElement(line); writer.println(vector); } }catch(IOException e){   System.out.println(e); }   } } Vectorの使い方がよくわからないので教えてください。宜しくお願いします。

  • arusu
  • お礼率8% (27/308)
  • Java
  • 回答数2
  • ありがとう数2

みんなの回答

noname#16216
noname#16216
回答No.2

> 現在、課題の作成中なんですけどうまくいかないので教えてください。 上のコードを見ていて、気になったのは > while((line = reader.readLine()) != null){ >  vector.addElement(line); >  writer.println(vector);  ← ★ > } ★ のところでしょうか。 このままだと、reader(標準入力のようですが)から読み出した行を配列に格納して、 1行読む度にその時点で配列に入っている全ての内容をファイルに出力することになります。 そもそもなぜ、わざわざVectorオブジェクトに読み出したファイルの内容をいったん 格納しているのかは分かりませんが、どうしてもこの処理が必要なのであれば、  while((line = reader.readLine()) != null) {   vector.addElement(line);  }  for (int i = 0; i < vector.size(); i++) {   writer.println((String)vector.get(i));  }  writer.flush();  writer.close(); として、読み出した内容を全ての配列に格納して、読み出しが終わった段階でファイルに出力する とすべきなのでは? > Vectorの使い方がよくわからないので教えてください。宜しくお願いします。 Vectorについては、C_ranさんが説明されている通りですね

noname#6248
noname#6248
回答No.1

ソースの内容は別としてVectorについてですが 大きさが後から変更できる配列だと考えるとわかりやすいです。 new Vector(); でからの箱を用意します。 addElement(line);でlineを順番に箱に詰めていきます。 内容が知りたいのでしたら //i番目の内容 vector.elementAt(i); とします。 for(int i=0;i<vector.size();i++){  System.out.println(vector.elementAt(i)); } とする事ですべての内容を表示できます。 参考URLに色々なJavaクラスの説明があります。参考にしてみてください。

参考URL:
http://java.sun.com/products/jdk/1.2/ja/docs/ja/api/
arusu
質問者

お礼

大変参考になりました。ありがとうございました。

関連するQ&A

  • FileWrite()メソッド

    すいません、少しお時間を頂きたいと思います。今コマンドライン上でファイルを作ろうとしています。ソースは結城浩氏の著書で使われている、ネット上から無料でダウンロードできるソースを使っています。以下の通りです。 import java.io.*; public class FileWrite{ public static void main(String[] args) { if (args.length != 1) { System.out.println("使用法:java WriteFile1 作成ファイル"); System.out.println("例:java WriteFile1 output.txt < input.txt"); System.exit(0); } String filename = args[0]; try { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(filename))); String line; while ((line = reader.readLine()) != null) { writer.println(line); } reader.close(); writer.close(); } catch (IOException e) { System.out.println(e); } } } ところが、これをコンパイルして実行までは出来るのですが、いざ因数(=ファイル名)を与えるとコマンドプロンプトがプロンプトのない状態で停止してしまいます。 javacのあるディレクトリ>java FileWrite abc.jsp と入力しています。(FileWriteはクラス名です。) また、拡張子の有無は関係ないようです。 何が悪いのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • Java初心者です。どうぞお教えください。

    CSVファイルを読み込んで、ソートしてから、現在日時のファイル名でCSVで書き出します。以下のファイルでは、CSVで書き出せません。現在日時のファイル名をつける方法もよくわかりません。どうぞ教えてください。importは省略しています。 public class CSVdata { public static void main(String[] args) { String fname = " " ; ArrayList<String> list = new ArrayList<String>(); String save_filename = getFileName(); if(args.length>0) { fname = args[0]; } try { BufferedReader reader = new BufferedReader( new FileReader(fname) ); String Line = null; while ((Line = reader.readLine()) != null) { list.add(Line); } reader.close(); Collections.sort(list ); PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(save_filename + ".csv"))); for (String string : list) { writer.println(string); } writer.close(); } catch (FileNotFoundException e) { System.out.println("ファイルがありません"); } catch (IOException e) { System.out.println("ファイルがありません"); } } public static String getFileName(){ Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); return sdf.format(d); } }

  • Javaのカウント方法について

    お伺い致します。 CSVで取り込んだデータの抽出をしたいのですが、方法が見出せません。どの点を直せば宜しいのでしょうか。 具体的には取り込んだ郵便番号をカウントして(例:京都市,34)CSVファイルに出力するように出したいのですがカウントがうまくできません。(以下、コメントアウトしたものがありますが、今までのソースを記載します) 宜しく御願いします。 import java.io.FileReader; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.*; public class test01 { static String fname ="26KYOUTO.CSV"; public static void main(String[] args){ if(args.length>0) fname = args[0]; try { BufferedReader reader = new BufferedReader(new FileReader(fname)); BufferedWriter pw = new BufferedWriter(new PrintWriter("orig.txt")); String line = reader.readLine(); System.out.println(line); pw.println(""); int n = 0; int count = 0; _/* while(true) { String line = reader.readLine(); if(line.equals("26101")) break; count++; } */ reader.close(); System.out.println("京都府北区=" +count ); } catch(FileNotFoundException e) { System.out.println("ファイルがありません。"); } catch(IOException e) { System.out.println("入出力エラーです。"); } } }

    • ベストアンサー
    • Java
  • ファイル読み込みで

    市販のテキストでファイルを読み込むプログラムを作ったのですがうまくできません。 import java.io.*; public class ShowFile{ public static void main(String args[]){ if(args.length != 1){ System.out.println("使用法: java ShowFile ファイル"); System.out.println("例: java ShowFile ShowFile.java"); System.exit(0); } String filename = args[0]; try{ BufferedReader reader = new BufferedReader(new FileReader(filename)); String line; while((line = reader.readLine()) != null){ System.out.println(line); } reader.close(); }catch(FileNotFoundException e){ System.out.println(filename + "が見つかりません"); }catch(IOException e){ System.out.println(e); } } } javac ShowFile.javaでコンパイルはうまくいったのですが、 実行時にjava ShowFile input.txtとするとException in thread "main" java.lang.NoClassDefFoundError: ShowFile というエラーが出ます。input.txtというファイルは存在します。 アドバイスをお願いします。

    • ベストアンサー
    • Java
  • BufferedReaderで配列のデータを取り出したい

    PrintWriterで配列のデータを書き込み、 BufferedReaderで書き込んだデータを呼び出したい のですが、下記のソースで書き込むと [Ljava.lang.String;@1add2dd のように表示されてしまいます。 テキストファイルに 1,Server1 のような感じで 書き込んで読み込むにはどのようにしたら いいでしょうか? すみません、ご教授下さい。 よろしくお願いします。 import java.io.*; public class IOTest { public static void main(String[] args) { try{ PrintWriter pr = new PrintWriter( new BufferedWriter(new FileWriter("test.txt")),true); String index = "1"; String serverName = "Server1"; String Server [] = {index, serverName}; pr.println(Server); System.out.println("登録したデータは:" + Server + "です。\n"); BufferedReader br = new BufferedReader( new FileReader("test.txt")); String line; while((line = br.readLine()) != null){ System.out.println("取り出したデータは:" + line + "です。"); } }catch(Exception e){ e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • Pleiades4.4でVectorの使用

    今日は! Javaの初心者です。 Pleiades4.4 LunaのVector機能の使い方について、質問します。 下記は、Pleiades4.3 Keplerに於けるVectorのサンプルプログラムであり、 結果が、コンソールに出力できます(コンパイル、RunはOK)。 このソースをPleiades4.4 Lunaで利用しようとしましたが、コンパイル段階で エラーとなります。 注 変更点) 1)import java.util.Vectorはコメント化しました。 2)vector.addElementは、サポートされていないようです。 Q1)Pleiades4.4 Lunaで走る為の変更について、コメント頂けないでしょうか? Q2)Pleiades4.3 Keplerでは、『import java.util.Vector』に警告が   出ますが、警告が出ないようにする、完全な書き方はありますか? 以上、ご回答頂けますと大変ありがたいです。 //===================================== import java.util.Vector; class Cvector { public static void main(String args[]){ //ベクトルとその要素を作成する Vector vector = new Vector(); vector.addElement(new Integer(995)); vector.addElement(new Float(-14.14f)); vector.addElement(new String("Hello")); vector.addElement(new Long(120000000)); vector.addElement(new Double(-23.45e-11)); //ベクトルの要素を表示 System.out.println(vector); //ベクトル要素を挿入する String s = new String("String_inserted"); vector.insertElementAt(s, 1); System.out.println(vector); //ベクトルから要素を削除する vector.removeElementAt(3); System.out.println(vector); } } //================================

    • ベストアンサー
    • Java
  • ファイル出力時の

    以下のソースでファイル出力するのですが、 BufferedReader br = new BufferedReader(new FileReader(new File(args[0]))); PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(args[1]))); //一行読み込みを行った文字列を格納 String line; //一行読み込み while((line = br.readLine()) != null){ //一行書き込み pw.write(line); System.out.println(line); } コンソールへの出力は正常に出力されるのですが、 ファイルへの出力は改行されずに一行で出力されてしまいます。 どうすればファイル出力も正常になるか教えてください。

  • 配列の値の参照について

    下記のプログラムの-------------で囲まれた部分が、コンパイルは通るのですが実行すると"value[1][0]"以降が参照できません(ここではcount=3 となっています)。 for文を使わずに"System.out.println(value[1][0])"とすると値を取り出せるのですが…。 実行時のエラーは Exception in thread "main" java.lang.ArrayIndexOutOfBoundException: 3 です。 ソースコードをそのまま載せて長文になってしまい申し訳ありません。 プログラム初心者なので、些細なことでもいいので回答お願いします。 import java.util.*; import java.io.*; public class Search { static String dataFileName = "CityData.txt"; ArrayList<String> array = new ArrayList<String>(); GetDataCount gdc = new GetDataCount(dataFileName); int count = gdc.getCount(); int count2 = 0; String[][] value = new String[count][3]; public Search(String dataFileName){ try{ BufferedReader reader = new BufferedReader( new FileReader(dataFileName) ); String line = ""; while((line = reader.readLine()) != null){ Vector<String> variable = readLine(line); System.out.println(variable); count2++; } }catch(IOException e){ System.out.println(e); } //---------------------------------------------------------- for (int i=0; i<count2; i++){ for (int j=0; i<3; j++){ System.out.println(value[i][j]); } } //---------------------------------------------------------- } public Vector<String> readLine( String line ){ StringTokenizer st = new StringTokenizer( line, "," ); Vector<String> variable = new Vector<String>(); for( int i=0 ; i<3 ; i++ ){ String data = st.nextToken(); variable.addElement( data ); value[count2][i] = data; System.out.println(value[count2][i]); } return variable; } public class GetDataCount{ int count = 0; public GetDataCount(String dataFileName){ try{ BufferedReader reader = new BufferedReader( new FileReader(dataFileName) ); String line = ""; while((line = reader.readLine()) != null){ count++; } }catch(IOException e){ System.out.println(e); } } public int getCount(){ return count; } } public static void main(String[] args){ new Search(dataFileName); } }

  • Javaのカウント方法について

    neko_noko様 補足の項目がなかったので新規質問という形ですが、Javaのカウント方法について続きで伺います。 import java.io.FileReader; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.*; public class test01 { static String fname ="26KYOUTO.CSV"; //Stringtoknizer st = new Stringtoknizer(line,","); public static void main(String[] args){ if(args.length>0) fname = args[0]; try { BufferedReader reader = new BufferedReader(new FileReader(fname)); int count = 0; String line = reader.readLine(); while(line != null) { if(line.equals("26101")){//配列を設定? count++; } line = reader.readLine(); } reader.close(); //この部分で配列をソート? System.out.println("京都府北区=" +count ); } catch(FileNotFoundException e) { System.out.println("ファイルがありません。"); } catch(IOException e) { System.out.println("入出力エラーです。"); } } } のようにしましたが、仮に集計できても、当然郵便番号が26101=24(件)、26102=2*(件)となってしまい、北区=24(件)、下京区=2*件という形にしたければ、『if(line.equals("26101")){』の部分で文字列の配列を設定し、『reader.close();』の後に配列で計算したものをソートすれば北区=24と表示できるかと思ったのですが、クエリで集計する湖と以外で、このような方向性で正しいでしょうか。たびたびで質問で申し訳ありません。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • javaプログラミングの質問です。

    http://questionbox.jp.msn.com/qa1030602.html?StatusCheck=ON に載っている、プログラムを以下のようにQuestionというクラスで実行してみたところ、 import java.io.*; class Question{ public static void main(String Args[]){ BufferedReader reader = null; String strArray[][] = new String[4][4]; String fileName = "foo.txt"; int i = 0; int j = 0; try{ reader = new BufferedReader ( new FileReader(fileName) ); String line; while ( (line = reader.readLine() ) != null ){ StringTokenizer st = new StringTokenizer ( line ); while ( st.hasMoreTokens() ){ strArray[i][j] = st.nextToken(); System.out.print ( strArray[i][j] + " " ); j ++; } j = 0; i ++; System.out.println (""); } } catch ( Exception e ){ System.out.println ( e.toString() ); } } } Exception in thread "main" java.lang.Error: コンパイル問題が未解決です。 StringTokenizer を型に解決できません。 StringTokenizer を型に解決できません。 というエラーが出ます。 このサイトの質問者はうまくいっているようなのですが、私のコンパイラがうまく動いていないのでしょうか? java version "1.6.0_07" を使っていて、Eclipseを用いてコンパイルをしたりしています。 どなたかご指摘をどうぞよろしくお願いいたします。

    • ベストアンサー
    • Java

専門家に質問してみよう