0

如果这已在其他地方得到回答,请提前抱歉,我可能只是在搜索错误的标签。

我希望使用实现 ActionListener 的匿名内部类创建一个包含各种变量的日志文件。这将附加到一个 JButton。

使用格式化程序,可以准确地为我提供一行所需的内容,但我想保留此事件的所有先前日志(我不在乎它是在最后一个条目之前还是之后)。

在我通过一些浏览本网站和其他网站时发现的各种方法碰壁后,您可以使用带有 Formatter 的构造函数中的 append 方法来做到这一点。

  • 是否可以在带有 Formatter 的内部类中使用 append ?

  • 如果不能,您能否推荐另一个仍能满足我需求的 Java 编写器?我还是个初学者,所以越简单越好……就目前而言。

  • 如果内部类和格式化程序没有任何额外的导入/包是可能的,请给我们一个提示或链接,我会继续搜索。

我附上了一个小的可编译示例代码,如果有人有兴趣玩,它可能会有所帮助。

谢谢,周末战士84

import java.awt.FlowLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Formatter;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class TestProgram extends JFrame{

private FlowLayout lay;

public TestProgram(){

super("Sample Program");
    lay = new FlowLayout();  
    setLayout(lay);

    final JLabel label1 = new JLabel("Label One");      
    add(label1);           
    final TextField field1 = new TextField(8);      
    add(field1);        
    final JLabel label2 = new JLabel("Exception Label");    
    add(label2);        
    final JButton button1 = new JButton
("Log Data");                           
    add(button1);
    button1.addActionListener(
        new ActionListener(){   
            public void actionPerformed(ActionEvent e){
                if(button1.isSelected());   
                try{
                Formatter fm = new Formatter("C:\\Test\\testlog.txt");                                                              
                fm.format("%s%s%s%s", "Sample Value: ",label1.getText(),
                        "  Sample Value2: ",field1.getText());
                fm.close();
                    }                                                                       
                    catch(Exception ee){                    
                    label2.setText("Make Sure Path exists, C:\\Test\\testlog.txt");                 
                    }
            }
    }
);          
}
}

主要的

import javax.swing.JFrame;

public class TestMain{

public static void main  (String[] args){

    TestProgram ts = new TestProgram();

    ts.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    ts.setSize(1200,500);
    ts.setVisible(true);
}   
}
4

2 回答 2

0

您是否有特定原因要使用 Formatter 执行此操作?读起来就像您想做一些非常基本的日志记录,Java 中有许多实现可以为您完成繁琐的工作。甚至java.util.logging 包也足以在单击按钮时将日志行附加到文件中。我个人建议logback,但这只是一种偏好。

如果您确实坚持自己进行文件操作,那么这个问题的答案可能适合您。在将整行写入文件之前,可以使用MessageFormat -class 完成格式化。

于 2013-03-22T12:18:59.940 回答
0

正如所承诺的,它仍然是一个 WIP,但它解决了我当前的问题。主要是混淆了作者的可能性,以及我需要格式化程序的信念。

if(button1.isSelected());               
            String path = "C:\\Test\\testlog.txt";
            String mylog = "\r\n"+"Sample Value: " + label1.getText()+"  Sample Value2: "+field1.getText();
            File file = new File(path);
            FileWriter writer;

            try {   
            writer = new FileWriter(file,true);             
            BufferedWriter buffer  = new BufferedWriter(writer);
            writer.append(mylog);                              
            buffer.close();

            }catch (IOException e1) {                           
            label2.setText("Make Sure Path exists, C:\\Test\\testlog.txt");
于 2013-03-22T21:07:21.860 回答