1

ファイルに書き込もうとしました。私の研究をしました、フラッシュして閉じることを確認しました。メッセージボックスを空白で読み取っていて何も書き込んでいないのではないかと思いましたが、System.out.printlnを実行して、正しく読み取られていることを確認しました。だから今はわからない。

元のコード:

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.io.*;

public class Form extends Applet implements ActionListener{
private TextField first = new TextField("First Name",12);
private TextField middle = new TextField("I",1);
private TextField last = new TextField("Last Name",15);
private TextField address = new TextField("Address",25);
private TextField city = new TextField("City",20);
private TextField state = new TextField("State",2);
private TextField zip = new TextField("Postal Code",10);
private Button submit =new Button("Submit");
private Button reset = new Button("Reset");
private Button save = new Button("Save");
private Button enlarge = new Button("Enlarge");
private TextArea message = new TextArea();


public void init()
{
    GridBagLayout gbl = new GridBagLayout();
    setLayout(gbl);
    GridBagConstraints c = new GridBagConstraints();
    c.anchor = GridBagConstraints.WEST;
    c.weightx=1.0;
    c.weighty=1.0;
    c.fill=GridBagConstraints.HORIZONTAL;
    c.insets=new Insets(5,5,5,5);
    gbl.setConstraints(first,c); add(first);
    c.fill=GridBagConstraints.NONE;
    gbl.setConstraints(middle,c); add(middle);
    c.fill=GridBagConstraints.HORIZONTAL;
    gbl.setConstraints(last,c); add(last);
    c.gridy=1;
    gbl.setConstraints(address,c); add(address);
    c.gridy=2;
    gbl.setConstraints(city,c); add(city);
    c.fill=GridBagConstraints.NONE;
    gbl.setConstraints(state,c); add(state);
    c.gridy=3;
    gbl.setConstraints(zip,c); add(zip);
    c.gridy=4;
    c.anchor = GridBagConstraints.CENTER;
    gbl.setConstraints(submit,c);add(submit);
    gbl.setConstraints(reset,c); add(reset);
    c.gridy=5;
    c.anchor = GridBagConstraints.CENTER;
    gbl.setConstraints(save, c); add(save);
    gbl.setConstraints(enlarge, c); add(enlarge);
    c.gridy=6;
    c.gridwidth=3;
    c.fill=GridBagConstraints.BOTH;
    gbl.setConstraints(message,c);add(message);
    submit.addActionListener(this);
    reset.addActionListener(this);
    enlarge.addActionListener(this);
    save.addActionListener(this);
}
public void actionPerformed(ActionEvent event)
{

    String initial = middle.getText();
    String a=message.getText();
    if (initial != null)
        initial +=". ";
    Object source = event.getSource();
    if (source == submit)
    {

        message.setText(first.getText()+ ' ' +initial+last.getText());
        message.append('\n'+address.getText());
        message.append('\n'+city.getText()+", " +state.getText());
        message.append(' ' +zip.getText());
        message.append("\n\nYour message:\n"+a);
    }
    else if (source == reset)
    {
        message.setText("");
        first.setText("");
        middle.setText("");
        last.setText("");
        address.setText("");
        city.setText("");
        state.setText("");
        zip.setText("");

    }
    else if (source == enlarge)

    {
        message.setFont(new Font("Serif", Font.PLAIN, 14));
        message.setForeground(Color.BLUE);
        message.setText(a);
    }
    else if (source == save)
    {
        try{


        File file=new File("savedMessage.txt");
        PrintWriter pw = new PrintWriter(file);
                pw.println(message.getText());
                //message.setText("Print was successful")
                pw.flush();
                pw.close();
                System.out.println(message.getText());
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();
            System.err.println("Error: " + e.getMessage());

        } catch (IOException e) {
            e.printStackTrace();
            System.err.println("Error: " + e.getMessage());
        }

    }

}

}

問題を修正するために使用されたコードは次のとおりです。

    else if (source == save)
    {
        try{
            f = new File("savedMessage.txt");
            bw = new BufferedWriter(new FileWriter(f,true));
            bw.write(message.getText());
            if(f.canWrite()){
            System.out.println("Success");
            }
            }

        catch (FileNotFoundException e) {
            e.printStackTrace();
            System.err.println("Error: " + e.getMessage());

        } catch (IOException e) {
            e.printStackTrace();
            System.err.println("Error: " + e.getMessage());
        }
    finally{

            try {
                bw.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
4

2 に答える 2

3

PrintWriter例外を飲み込みます。Javadocを参照してください。を呼び出す必要がありますcheckError()。さらに良いことBufferedWriterに、それらを飲み込まない、を使用してください。アプレットが署名されていない限り、アップルサンドボックスのアクセス許可の問題が発生している可能性があります。

于 2012-12-10T00:27:45.497 に答える
-1

最初のヒント:ファイルを閉じてください!catch ioexceptionの下で、finallyブロックを追加します

    File file = null;
    try {
       file = new File("filename.txt");
    } catch (IOException ex) {

    } finally {
       try {
            file.close();
        } catch (IoException ex2) { }

    }

ファイルが書き込み可能かどうかをさらに確認します

if (!file.canWrite()) {
// forget it, cannit write
 }
于 2012-12-10T00:25:03.570 に答える