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

解決済みの質問

Javaのプログラミングで困っています。

プロフィールを打ち込んで表示するプログラムを書いていました。
プロフィールの打ち込み後に画面に表示するのと同時にテキストファイルに書き出したいと思ったため、書いてみましたが、ファイルに書き込めず知識不足で困っています。
是非教えていただきたく書き込みをさせていただきました。
自分で書いたコードは書きになります。

import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class Sample extends JFrame implements ActionListener{

/**
*
*/
private static final long serialVersionUID = 1L;

static JTextField name;
static JTextField birth;
static JTextField address;
static JTextField mail;
static JTextField number;
JLabel label;

public static void main(String args[]){
Sample frame = new Sample("profile");
frame.setVisible(true);

}

Sample(String title){
setTitle(title);
setBounds(100, 100, 500, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel p = new JPanel();

name = new JTextField("名前", 20);
birth = new JTextField("生年月日", 20);
address = new JTextField("住所", 40);
mail = new JTextField("mail", 40);
number= new JTextField("電話番号", 30);
JButton button = new JButton("取得");
button.addActionListener(this);
label = new JLabel();

p.add(name);
p.add(birth);
p.add(address);
p.add(mail);
p.add(number);
p.add(button);

Container contentPane = getContentPane();
contentPane.add(p, BorderLayout.CENTER);
contentPane.add(label, BorderLayout.SOUTH);
try{
File file = new File("C:Users\\mattun\\Documents\\sample.txt");

if (checkBeforeWritefile(file)){
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));

//ファイルに書き込む内容
pw.println("名前:"+name.getText());
pw.println("生年月日:"+birth.getText());
pw.println("住所:"+address.getText());
pw.println("mail:"+mail.getText());
pw.println("電話:"+number.getText());

pw.close();//ファイルを閉じる
}else{
System.out.println("ファイルに書き込めません");//書き込み出来ない場合
}
}catch(IOException e){
System.out.println(e);
}
}

public void actionPerformed(ActionEvent e){
label.setText("<html>"+"名前:"+name.getText()+"<br>"+"生年月日:"+birth.getText()+"<br>"+"住所:"+address.getText()+
"<br>"+"mail:"+mail.getText()+"<br>"+"電話:"+number.getText()+"</html>");
}
private static boolean checkBeforeWritefile(File file){
if (file.exists()){
if (file.isFile() && file.canWrite()){
return true;
}
}

return false;
}

}

投稿日時 - 2012-02-27 05:17:04

QNo.7329793

すぐに回答ほしいです

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

Users\mattun\Documents\sample.txt
\Users\mattun\Documents\sample.txt
この二つの表現の違い、わかりますよね?
相対パスと絶対パスです。

Windowsの場合、ルートディレクトリもカレントディレクトリもドライヴ毎にあります。
上のものに、それぞれドライブ指定を追加したものが、特定ドライブの相対パスと絶対パスです。
C:Users\mattun\Documents\sample.txt
C:\Users\mattun\Documents\sample.txt

おそらく、下の絶対パスのつもりで書いたのだろう、とは予想はできます。が、上のケースを利用しようとしている可能性もあります。なので、「意図したものですか?」と聞きました。

人間でも判断できないことを、コンピュータが判断できるわけがありません。コンピュータは書かれた通りにしか解釈しません。

投稿日時 - 2012-02-27 18:31:39

お礼

ありがとうございます。
意味がいまいち理解出来ておりませんでした。
無事、ファイルに書き出すことは出来ましたが、2回目の内容を打ってみても、1回目の内容を書き込んでしまいます。
上書きするのはいいのですが、どのような手順をすれば、1回目の内容を書き出さずに2回目の内容を書き出せるのでしょうか?

投稿日時 - 2012-02-27 21:57:34

ANo.2

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

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

回答(2)

ANo.1

> File file = new File("C:Users\\mattun\\Documents\\sample.txt");

これだと、相対ディレクトリ指定になるので、Cドライブの「現在のディレクトリ」の下のUsersの下の....となりますが、それは意図したものですか?
また、指定したディレクトリは存在しますか?Fileはディレクトリは作りません。

投稿日時 - 2012-02-27 07:34:54

補足

ドキュメントの下にテキストファイルを作って置いています。
場所はどこでもいいのですが、ドキュメントに置いていました。

投稿日時 - 2012-02-27 08:43:03

お礼

ご丁寧に教えていただきありがとうございます。

投稿日時 - 2012-02-27 21:58:28

あなたにオススメの質問