JAVA程序设计 实验三 Java IO的应用

《Java程序设计》实 验 报 告(三)

实验名称:  Java IO的应用

实验地点:10-413

所使用的工具软件及环境:

环境:Windows 10;jdk 1.8;

工具:eclipse

实验目的:

在Eclipse下编辑、编译、运行、调试简单的Java程序 。

熟悉掌握java的输入输出机制,掌握流的概念与应用。

实验内容:

编写图形界面程序,接受用户输入的5个浮点数据和一个文件目录名,将这5个数据保存在该文件中,再从文件中读取出来并且进行从大到小排序,然后再一次追加保存在该文件中。

例如: 

源程序:

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

public class FloatDataGUI extends JFrame implements ActionListener {

    private JTextField[] dataFields;
    private JTextField dirField;
    private JButton saveButton;
    private JButton sortButton;
    private File dataFile;

    public FloatDataGUI() {
        super("浮点数存储排序");

        // 设置界面布局
        setLayout(new BorderLayout());

        // 创建输入框和标签
        JPanel inputPanel = new JPanel(new GridLayout(6, 2));
        JLabel[] labels = new JLabel[5];
        dataFields = new JTextField[5];
        for (int i = 0; i < 5; i++) {
            labels[i] = new JLabel("数据 " + (i+1));
            inputPanel.add(labels[i]);
            dataFields[i] = new JTextField();
            inputPanel.add(dataFields[i]);
        }
        JLabel dirLabel = new JLabel("文件目录");
        inputPanel.add(dirLabel);
        dirField = new JTextField();
        inputPanel.add(dirField);
        add(inputPanel, BorderLayout.CENTER);

        // 创建按钮和监听器
        JPanel buttonPanel = new JPanel(new GridLayout(1, 2));
        saveButton = new JButton("保存数据");
        saveButton.addActionListener(this);
        buttonPanel.add(saveButton);
        sortButton = new JButton("排序追加");
        sortButton.addActionListener(this);
        buttonPanel.add(sortButton);
        add(buttonPanel, BorderLayout.SOUTH);

        // 设置窗口大小和显示位置
        setSize(400, 200);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == saveButton) {
            // 保存数据到文件
            try {
                dataFile = new File(dirField.getText(), "data.txt");
                FileWriter writer = new FileWriter(dataFile);
                for (int i = 0; i < 5; i++) {
                    writer.write(dataFields[i].getText() + " ");
                }
                writer.write( "\n");
                writer.close();
                JOptionPane.showMessageDialog(this, "数据保存到文件: " + dataFile.getAbsolutePath());
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(this, "Error.");
            }
        } else if (e.getSource() == sortButton) {
            // 从文件中读取数据并进行排序
            try {
                Scanner scanner = new Scanner(dataFile);
                ArrayList<Double> dataList = new ArrayList<Double>();
                while (scanner.hasNext()) {
                    dataList.add(Double.parseDouble(scanner.next()));
                }
                scanner.close();
                Collections.sort(dataList, Collections.reverseOrder());

                // 追加数据到文件
                FileWriter writer = new FileWriter(dataFile, true);
                writer.write( "从大到小排序后的数据:\n");
                for (Double d : dataList) {
                    writer.write(d.toString() + " ");
                }
                writer.close();
                JOptionPane.showMessageDialog(this, "数据排序后追加到文件: " + dataFile.getAbsolutePath());
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(this, "Error.");
            }
        }
    }

    public static void main(String[] args) {
        FloatDataGUI gui = new FloatDataGUI();
    }

}

实验结果与体会:

(1)程序说明:

程序界面包含5个文本框,用于输入浮点数据,以及一个文本框用于输入文件目录名。点击"保存数据"按钮,程序将这5个数据保存在该目录下的"data.txt"文件中,并弹出提示框。点击"排序追加"按钮,程序将从"data.txt"文件中读取数据,并按从大到小的顺序进行排序,然后再次将数据追加保存在同一个文件中,并弹出提示框。

(2)代码说明:

当用户启动程序时,程序会创建一个名为FloatDataGUI的类的实例,该类继承自JFrame,并且实现了ActionListener接口。JFrame是Swing GUI组件库中表示一个窗口的类。在该类的构造函数中,设置了程序的界面布局、添加了输入框、标签、按钮以及按钮的监听器,并设置了窗口的大小、显示位置和关闭行为。

接下来,实现了ActionListener接口中的actionPerformed()方法,该方法是当用户点击按钮时被调用的。在该方法中,使用getSource()方法来判断用户点击的是哪个按钮,并执行相应的操作。如果用户点击了"保存数据"按钮,将输入的5个数据保存到指定目录下的"data.txt"文件中,如果用户点击了"排序追加"按钮,将从"data.txt"文件中读取数据并按从大到小的顺序排序,并将排序后的数据追加到同一个文件中。

接下来,使用Collections.sort()方法按从大到小的顺序对数据进行排序,并将排序后的数据追加到同一个文件中。使用FileWriter对象并传入一个true值来打开文件的追加模式,这样可以将新的数据追加到文件的末尾而不是覆盖原有的数据。

最后,使用JOptionPane.showMessageDialog()方法在弹出的提示框中显示操作的结果和文件的路径。如果发生错误,使用同样的方法来显示错误消息“Error.”。

  1. 程序操作:

      a.运行程序,输入五个浮点数数据;

b.复制文件目录

    c.点击保存数据

    d.查看文件

e.点击排序追加

f.查看文件

  1. 心得体会:

本次实验让我更深入地理解了Java IO的概念和应用。在本次实验中,我学习了Java中的输入输出机制以及各种流的使用方法和特点。

通过本次实验,我了解了Java IO的两种基本流类型:字节流和字符流。字节流是以字节为单位进行输入和输出的,字符流则是以字符为单位进行输入和输出的。在实验过程中,    我学习了如何使用File类和FileOutputStream类、FileInputStream类、BufferedWriter类、BufferedReader类、PrintWriter类等常用的IO类来进行文件读写操作。

除了以上基本的IO类,我还学习了Java中的序列化和反序列化操作,了解了如何使用ObjectOutputStream类和ObjectInputStream类来对Java对象进行序列化和反序列化。

通过本次实验,我进一步熟悉了Java的输入输出机制,掌握了流的概念和应用。我相信这些知识对我今后的编程工作和学习都将非常有帮助。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值