現在、課題の作成中なんですけどうまくいかないので教えてください。
ファイルに表示されているアクセスログファイルを別のファイルに表示させるコードなんですが、
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の使い方がよくわからないので教えてください。宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (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さんが説明されている通りですね
    • good
    • 0

ソースの内容は別として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/ …
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/03/10 22:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qソフトウェアのダウンロードができなくなりました。

こんにちは。
数日前から急にソフトウェアのダウンロードができなくなりました。
具体的な症状としては、インターネットでVector等のサイトからソフトウェアのダウンロードをしようとすると「ダウンロード中」のポップアップは出てくるのですがそのままダウンロードが進まないという症状です。
インターネットは今もつながるのですが、ソフトウェアのダウンロードだけができません。
数日前までは問題なくできていました。
解決策をご存知の方教えていただけますか。

Aベストアンサー

ブラウザのキャッシュをクリアしてみて下さい。
IE6なら、ツール - インターネットオプション ー 全般タブで「ファイルの削除」をクリックです。

QString a = "a"; と String b = new String ("b"); の違い

String a = "a";
String b = new String ("b");

お伺いしたいのですが、
b は String のインスタンスを作ってると思いますが、
a はどんなことをしてるのでしょうか?

Aベストアンサー

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その初期化に使った無名のStringインスタンスの3つがメモリ上に存在することになります。
if(b1 != b2) System.out.print("b1とは違うインスタンス");
の結果でもわかると思います。

したがって、
String b = new String ("b"); というのは、Integerに例えると
Integer i = new Integer(new Integer(1)); という処理を
していることになり、ひとつ無駄なインスタンス生成となります。

お二人の回答を具体的に言うと、こういうことです。
String a1 = "a";
String a2 = "a";
String b1 = new String ("b");
String b2 = new String ("b");

a1のために、aという文字列のインスタンスが作られますが、
a2に代入されるのは、a1に使われたインスタンスが再利用されます。
これは、
if(a1 == a2) System.out.print("a1と同じインスタンス");
の結果でもわかります。

一方、b1とb2は、bという文字列オブジェクトを引数に、新しいインスタンスを生成する指示がありますので、b1とb2と、その...続きを読む

Qvectorでソフトをダウンロード

vectorでソフトをダウンロード

vectorのサイトでフリーソフトをダウンロードしようとすると
missing plug-inと表示されてダウンロードが開始されません
どうしたらダウンロードできるのか教えてください

Aベストアンサー

Internet Explorerをお使いでできないなら、

ダウンロードが始まらない場合は、こちらをクリック

という所をクリックしてみてはどうでしょうか?
クリックでダメなら、右クリックで対象をファイルに保存でもやってみてください。

ダイレクトにファイル保存ができるはずです。

QJAVAの質問です。 ( String args[] )それとも(String[] args) ?

MAINのこの引数ですが、
どちらが正しいのでしょうか?

また、そもそも この[]はなぜ必要なのでしょうか?
配列を意味していますか?

Aベストアンサー

mainに関してだけは (String[] args) が正しい・・・と思いましたが
( String args[] ) でコンパイルも実行も両方通ったのでどちらも正しいようです

配列を意味しています
例えば
String[] hai={"どちらも","正しい","とは","知らなかった"};
String hai[]={"どちらも","正しい","とは","知らなかった"};
ではどちらも配列を宣言した上でhai[0],hai[1],hai[2],hai[3]に文字列を代入しています。

String[] hai=new String[3];
String hai[]=new String[3];
で配列領域を確保してから
hai[0]="どちらも正しい";
のように代入してゆく方法もあります


main(String[] args) のString配列argsの中にはコマンドプロンプトでの実行時にプログラム名の後ろにスペースで分けて入力した文字列が[0]から順に代入されます

実行時に例えばHello.javaを実行するため

java Hello と入力して実行した時はargsには何も入っていませんが

java Hello nyuuryoku shita と入力して実行した時には

Hello.javaが実行された時mainメソッドの中で
args[0]には nyuuryoku が
args[1]には shita が代入された状態になっています

実行と同時に入力した値をプログラム内で使いたい時に用いる変数です

mainに関してだけは (String[] args) が正しい・・・と思いましたが
( String args[] ) でコンパイルも実行も両方通ったのでどちらも正しいようです

配列を意味しています
例えば
String[] hai={"どちらも","正しい","とは","知らなかった"};
String hai[]={"どちらも","正しい","とは","知らなかった"};
ではどちらも配列を宣言した上でhai[0],hai[1],hai[2],hai[3]に文字列を代入しています。

String[] hai=new String[3];
String hai[]=new String[3];
で配列領域を確保してから
hai[0]="どちらも正しい";...続きを読む

QVectorソフトダウンロードにて

Vectorソフトダウンロードで間違えて有料のソフトをダウンロードしてしまったんですがなんとかなりませんか?
まだ開いてはいないんですが

Aベストアンサー

そのまま該当ファイルを削除してしまえば大丈夫だと思います。

シェアレジ・プロレジなどの場合は、
ダウンロード後にインストールやレジストレーションに使うキーを
有料で販売していますので、それを買わなければ問題ありません。

それ以外の場合でもほとんどの場合お試し期間があり、
継続使用の場合にはお金を払う方式になっていますので、
ダウンロードしてしまった時点で
料金が発生するということはないと思います。

QSystem.err. printlnとSystem.out.printlnはどう違うんでしょうか?

 初心者なので今までSystem.out.println文しか見たことがなかったのですが、テキストで急にIOExceptionのcatch文の中にSystem.err. println文が出てきました。
 errをoutに書き換えてもエクリプスではチェックされなかったのですが、どういう違いがあるのでしょうか?

Aベストアンサー

出力先が「標準出力」か「標準エラー出力」かの違いです。

Windows環境ですと、
標準出力はコンソール(コマンドプロンプト、もしくはDOS窓のこと)に出力されます。
標準エラー出力も同じくコンソールに出ます。

ただし、リダイレクト機能を使ったときに違いが表れます。
リダイレクトとは、
>program > a.txt
のように、標準出力をするプログラムの出力を、
テキストファイルに書き出すことです。
Javaでも、コンソールへのテキスト出力をするプログラムだったら、
>java nantoka > a.txt
で、a.txtにテキストが書き込まれると思います。
試してみてください。

それで、「標準エラー出力」の方は、
リダイレクトをしてもリダイレクトされず、
コンソールにテキストが書き出されます。
標準エラー出力は、通常、エラーが起こったときの
表示に使うもので、
これまでリダイレクトされてしまうと、
ユーザーがエラーを検知できなくなるからです。

ためしに
System.out.println("ABCD");
System.err.println("いろはに");
System.out.println("EFG");
System.err.println("ほへと");
と出力するtestプログラムを作って、

>java test

>java test > a.txt
として、動作の違いをたしかめてみてください。

(付記:どうしてもエラー出力をリダイレクトしたい場合、
>のかわりに2>を使うことによって可能です。
Linux系ではシェルによって違いがあります)

出力先が「標準出力」か「標準エラー出力」かの違いです。

Windows環境ですと、
標準出力はコンソール(コマンドプロンプト、もしくはDOS窓のこと)に出力されます。
標準エラー出力も同じくコンソールに出ます。

ただし、リダイレクト機能を使ったときに違いが表れます。
リダイレクトとは、
>program > a.txt
のように、標準出力をするプログラムの出力を、
テキストファイルに書き出すことです。
Javaでも、コンソールへのテキスト出力をするプログラムだったら、
>java nantoka > a.txt
で、a.tx...続きを読む

Qフリーソフトウェアのダウンロードに関しての疑問

フリーソフトウェアのダウンロードに関して、疑問が二つあります。

1、フリーソフトウェアをダウンロードすると、「開く」、「保存」、「実行する」などのオプションがありますがそれぞれ何を意味するのでしょう??

2、初歩的な質問かと思いますが、なぜフリーのソフトウェアなどを「ダウンロード」して「インストール」するという手順を踏むのでしょう??
「ダウンロード」、「インストール」のそれぞれをしなければ使えない理由を教えていただきたいです。

以上、ひとつでもいいのでわかる方いましたらよろしくお願いします。

Aベストアンサー

フリーソフトウェアをダウンロードしてなくてこれからしようとしている
という前提で話をさせていただきます、勘違いだったらごめんなさい
HP上からフリーの(またはノンフリーの)ファイルを見つけてそれをクリックしたとき
ブラウザは拡張子を見てその後の動作を決定します
たとえばtest.pdfというファイルがHP上にあったとしてそれをクリックするとブラウザはpdfの読み込みのできるプラグインを持っていれば
Temporary Internet Filesフォルダにダウンロードされたtest.pdfを
ブラウザの画面に表示します
このことはデスクトップにダウンロードしたtest.pdfなどのデータファイル
を「開く」事とほぼ同じ結果になります
(IEを使うのかAdobeReaderを使うのかの差ぐらいしかありません)

ここで拡張子を見てその後の動作を決定するのでHP上のtest.cntをクリック
するとブラウザはそんな拡張子は知らないのでOSに処理をゆだねます
そこでも「開く」を選択すればOSがtest.cntの拡張子に関連づけられた
アプリケーションを検索しそれがあればTemporaryInternetFilesフォルダに
ダウンロードを開始してアプリケーションにデータを渡しますし
関連づけられたアプリケーションがなければプログラムの一覧を
表示してどのプログラムにデータを渡すかUSERに聞いてきます
拡張子と関連づけに関してはWindows2000であればコントロールパネル
→フォルダオプション→ファイルタイプから拡張子をえらんで
詳細設定をクリックすればその拡張子だとOSがどうするのかがわかります


またHP上のtest.exeをクリックして「開く」と自動的にTemporaryInternetFilesフォルダにアプリケーションを
ダウンロードしTemporaryInternetFilesフォルダでアプリを実行します
このことはブラウザ上のtest.exeを「実行する」としても
同じ事が起こります
先ほどからTemporaryInternetFilesフォルダにダウンロード
すると言っていますがこのフォルダは一時的にファイルを保管している
だけのフォルダで使われないファイルや古いファイルはどんどん消していきます
そうならないためにはほかの場所にダウンロードするのがよいと思います
アプリケーションの置き場を明示的に指定するオプションが「保存」
になり好きなところ(管理しやすいところ)にファイルを置くことができます

2.の質問ですが
ほとんどのフリーのソフトウエアがCDやDVDに収録されていないので
WebまたはFTPサーバからの配布方法でしか配布できないというのが
ダウンロードしなければならない理由でしょうか
インストールの理由ですがインストールする必要のないソフトもあります
単体で動作するソフトをダウンロードすればクリック一つで動作します
インストールする必要があるソフトとはインストールされる環境によって
ソフト側でも設定変更を行わなければならないソフトだと考えています

CDやDVDでのアプリのインストールではOSのAutoRun機能でおまかせ
インストールができる事が多くCDやDVD入れたらリターンキー数回押して
メディアを取り出したらインストール終了ということも大いにあります

というのではだめですか?

フリーソフトウェアをダウンロードしてなくてこれからしようとしている
という前提で話をさせていただきます、勘違いだったらごめんなさい
HP上からフリーの(またはノンフリーの)ファイルを見つけてそれをクリックしたとき
ブラウザは拡張子を見てその後の動作を決定します
たとえばtest.pdfというファイルがHP上にあったとしてそれをクリックするとブラウザはpdfの読み込みのできるプラグインを持っていれば
Temporary Internet Filesフォルダにダウンロードされたtest.pdfを
ブラウザの画面に表示します...続きを読む

QA a = new A(){}; の構文の意味が分からない。

下記サイトのコードを読んでいて、

ResponseListener listener = new ResponseListener() {
//略
};

という書き方があったのですが、どういう意味になるのでしょうか?
インスタンスの作り方は単に

A a = new A();

だと思うのですが…。

http://www.snmp4j.org/doc/org/snmp4j/Snmp.html

Aベストアンサー

無名クラスと呼ばれるものよ。
私も良くやるわ。

ちなみに
A a = new A();
はできないわよ。
Aはインターフェースだからね。


上記の場合、正式に実装するなら、
ResponseListenerをimplementsした
MyResponseListener(仮名)を別途作成し、
それを
ResponseListener listener = new MyResponseListener();
とする必要があるわ。
でも、このMyResponseListenerは
今ここでしか使わない、他からまったく参照する必要のない
超ローカルなクラスなのよ。
このメソッドが終了すればGCにかけてもいいわけ。
そんな場合、わざわざクラスを1つ作る必要なくて
その場でちょちょいとやってしまうことができるのよ。
それが無名クラスっていう実装方法よ。

http://www.javaroad.jp/java_class15.htm

FileFilterやCompare、Runnableなんかで
他のクラスで再利用しないときは良くやるわ。

無名クラスと呼ばれるものよ。
私も良くやるわ。

ちなみに
A a = new A();
はできないわよ。
Aはインターフェースだからね。


上記の場合、正式に実装するなら、
ResponseListenerをimplementsした
MyResponseListener(仮名)を別途作成し、
それを
ResponseListener listener = new MyResponseListener();
とする必要があるわ。
でも、このMyResponseListenerは
今ここでしか使わない、他からまったく参照する必要のない
超ローカルなクラスなのよ。
このメソッドが終了すればGCにかけても...続きを読む

Qダウンロード vector

vectorとかでダウンロードするときに確認せずにダウンロードにうつってしまうんですが、これを確認するにはどうしたらいいのでしょうか?

Aベストアンサー

ダウンロードする際に保存の確認メッセージが表示されない場合の対処方法
http://support.microsoft.com/default.aspx?scid=kb;ja;880999

こっちかな
IEでしたら ツール インターネットオプション セキュリティ レベルのカスタマイズ ファイルのダウンロード時にダイヤログボックスを開く が有効になってますか

Qpublic static void main(String args

public static void main(String args[]) {

public static void main(String[] args) {
は何が違います?

Aベストアンサー

何も違いません。

javaでは配列を宣言する時に、型の後ろに[]をつけても
変数名の後ろに[]を付けてもどちらでもいいことになっています。


人気Q&Aランキング

おすすめ情報