【问题标题】:PrintWriter not writing to file, tried adding flush() and close() JavaPrintWriter 未写入文件,尝试添加 flush() 和 close() Java
【发布时间】:2012-12-10 00:19:53
【问题描述】:

试图写入文件。我做了研究,确保冲洗并关闭。我以为它可能正在读取空白的消息框并且什么也没写,但是做了一个 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();
            }

【问题讨论】:

  • 这是一个 Applet...与 Applet 中的文件系统交互存在限制。
  • 我要感谢你们所有人(Vincent Ramdhanie,EJP,Alex Wien)对我的帮助。我从中学到了很多东西,并把它写下来。编写它的目录与我编写的其他小程序的目录不同,这也让我感到困惑。再次谢谢大家,我不知道怎么私信你们。

标签: java file-io printwriter


【解决方案1】:

PrintWriter 吞下异常。请参阅 Javadoc。您需要致电checkError()。更好的是,使用BufferedWriter,它不会吞下它们。除非您的小程序已签名,否则您可能会遇到苹果沙盒权限问题。

【讨论】:

    【解决方案2】:

    第一个提示:关闭文件! 在 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
     }
    

    【讨论】:

    • 抱歉听起来很无知,但我试过了,我也试过 pw.close();反而。将 File file=new File... 行移出 try{ 我得到 for file.close() undefined for type file 和 for pw.close();我得到 pw 无法解决。如果我将 PrinterWriter pw = new PrintWriter 行移到 try 循环之外,它会告诉我为 FileNotFound Exception 添加一个 try/catch,我已经这样做了......
    • PrintWriter pw;外面试试,然后 pw = new Printwriter。在里面尝试相同的文件文件;
    • @user1890378 文件 file = null; PrintWriter pw = null;
    • 是否为空。添加了canWritechec,添加了finally close。现在在控制台中的线程“AWT-EventQueue-1”java.lang.NullPointerException 中获取异常
    • 调试,检查 pw 是否可以为空,有时在 pw.close 之前必须检查是否 pw != null;在你的情况下,我认为我们不需要,但我没有看到 yozr 当前的 cide
    猜你喜欢
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多