こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

テキストファイルの日付表示

JAVA初心者なのですが、テキストファイルに出力する時にファイル名を現在日付にしたいのですが、どうすればよいでしょうか?(yyyymmdd.txtを20070316.txtというふうにしたい)
後、@SuppressWarnings("unchecked")と記述しているのにコンパイルで-Xlint:unchecked.警告が出てきてします!どなたかご教授ください!!ちなみにJAVA1.5

import java.io.File;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;
import java.util.ArrayList;

public class Writedown {
@SuppressWarnings("unchecked")/*コンパイラの警告を抑制する */
public static void fileWrite(ArrayList<ArrayList> WriteArrayList) {
try {
File txt = new File("yyyymmdd.txt"); /*出力するファイル*/
BufferedWriter bw = new BufferedWriter(new FileWriter(txt));/*
try {
for(int i = 0; i < WriteArrayList.size(); i++){
ArrayList list = WriteArrayList.get(i);
if(i == 0){
bw.write((list.size() - 3) + "科目成績表\r\n");
}

for(int j = 0; j < list.size(); j++){
if(j > 0){
bw.write("\t");
}
if(list.get(j).toString().equals("名前")){
list.remove(j);
list.add(j,"名前");
}
bw.write(list.get(j).toString());
System.out.print(list.get(j) + "\t");
}
bw.write("\r\n");
bw.flush();
System.out.println("");
}
} catch (IOException e) {
System.out.println("ファイル書き込みエラー");
}
bw.close();
} catch (IOException e) {
System.out.println("ファイルオープンエラー");
}
}
}

投稿日時 - 2007-03-16 02:01:06

QNo.2837270

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

No1です。
すみません、最初の質問の回答を忘れていました。
方法はいろいろあると思うのですが、SimpleDateFormatクラスを使う方法があります。
このクラスは日付をフォーマットするクラスです。
コンストラクタで、フォーマットの形式を指定します。
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
こうすれば、yyyyMMdd形式に変換することができるようになります。
あとは、
sdf.format( new Date() );
のように、Dateクラスで現在日時をしていすると、現在日時をyyyyMMdd形式に変換してくれます。
※月は「M」であり、「m」を指定すると「分」になってしまいます。

ちなみに私は、
String s = new SimpleDateFormat("yyyyMMdd").format( new Date() )
というように書いてしまいます。

投稿日時 - 2007-03-16 03:08:46

お礼

返信遅れて申し訳ありません!!
非常にわかりやすく丁寧にご回答頂きありがとうございました!!
またneko_nokoさんに感謝です!

投稿日時 - 2007-03-18 12:01:25

ANo.1

Genericというやつですね。Java1.5から対応しています。
Java1.4以前は、ArrayListクラスのaddメソッドで、なおかつ引数を2つとるものは、
add(int index, Object element)
となっていて、第2引数はObject型でした。
ただ、これだと使う度にelementを使いたい型にいちいちキャストしなくてはいけなくて不便だったので、
Java1.5からはGenericという考え方を取っています(C++などでは既にあるそうです)。

Objectの引数や戻り値を持つクラスに対して、あらかじめ型を決めておいて
「実際はこの型を使うんだよ」ということを決めておくのです。
例えば、fileWriteメソッドの引数で、「ArrayList<ArrayList> WriteArrayList」というのがありますが、
この「<ArrayList>」の部分がそのGenericです。
この場合、WriteArrayListで使用するadd()やget()メソッドは、
すべてArrayList型になる、と決めているわけです。

で、警告の話ですが、-Xlint:uncheckedオプションをつけてコンパイルすると分かるのですが、
ArrayList list = WriteArrayList.get(i);

list.add(j,"名前");
この部分が問題です。
変数listもArrayList型で、引数を2つとるadd()メソッドは2番目の引数がGenericを使用しています。
なので、listの宣言時にこの引数の型を指定しないといけないのです。
コードでは、「"名前"」と、String型を使っているので、
ArrayList<String> list
のように、型を指定すればいいです。

と思ったらもう一つ問題が、
fileWriteメソッドの引数、「ArrayList<ArrayList> WriteArrayList」の部分です。
ちょっとややこしいのですが、
ArrayList型であるWriteArrayListで使用するGenericがArrayList型である、
と指定してあるので問題なさそうなのですが、
そのGenericで指定したArrayList自体もGenericを使用しており、この型が指定されていない、
というよく分からないことになっています。
この場合は、入れ子にして、
ArrayList<ArrayList <String>> WriteArrayList
のようにすれば問題ないようです。
※<String>の部分は使用する型によって変えてください。

後は、J2SEのバージョンを1.4以下に落とすと、そもそもこんな問題は発生しませんが・・・
理解すると非常に便利なので、覚えておくといいですよ。

参考URL:http://www.javainthebox.net/laboratory/J2SE1.5/LangSpec/Generics/Generics.html

投稿日時 - 2007-03-16 02:50:14

あなたにオススメの質問