Java——实验3:Java IO的应用

实验3: Java IO的应用

1. 所使用的工具软件及环境

        环境:Windows 8.1;jdk 1.8;

        工具:eclipse

2. 实验目的

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

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

3. 实验内容

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

        例如:

4. 源程序

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Arrays;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class window {
    private JPanel SortWindow;
    private JTextArea FloatArea;
    private JTextArea FileArea;
    private JButton SaveButton;
    private JButton LookButton;
    private JButton SortButton;

    public static void main(String[] args) {
        JFrame frame = new JFrame("window");
        frame.setContentPane((new window()).SortWindow);
        frame.setDefaultCloseOperation(3);
        frame.pack();
        frame.setVisible(true);
    }

    public window() {
        this.$$$setupUI$$$();
        this.SaveButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String fiveFloat = window.this.FloatArea.getText();
                String fileName = window.this.FileArea.getText();
                System.out.println(fiveFloat);
                System.out.println(fileName);

                try {
                    File saveFile = new File("D:" + File.separator + "result" + File.separator + fileName + ".txt");
                    if (!saveFile.exists()) {
                        try {
                            saveFile.createNewFile();
                        } catch (IOException var7) {
                            var7.printStackTrace();
                        }
                    }

                    FileOutputStream fos = new FileOutputStream(saveFile);
                    PrintStream ps = new PrintStream(fos);
                    ps.printf(fiveFloat);
                    ps.close();
                    JOptionPane.showMessageDialog((Component)null, "成功!");
                } catch (FileNotFoundException var8) {
                    var8.printStackTrace();
                }

            }
        });
        this.SortButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    String fileName = window.this.FileArea.getText();
                    File saveFile = new File("D:" + File.separator + "result" + File.separator + fileName + ".txt");
                    BufferedReader rd = new BufferedReader(new FileReader(saveFile));
                    String allFloat = "";

                    String lineFloat;
                    String sortFloat;
                    for(sortFloat = ""; (lineFloat = rd.readLine()) != null; allFloat = allFloat + lineFloat) {
                    }

                    rd.close();
                    String[] arr = allFloat.split(" ");
                    float[] f = new float[arr.length];

                    int i;
                    for(i = 0; i < arr.length; ++i) {
                        f[i] = Float.parseFloat(arr[i]);
                    }

                    Arrays.sort(f);

                    for(i = arr.length - 1; i >= 0; --i) {
                        String s = String.valueOf(f[i]);
                        sortFloat = sortFloat + s + " ";
                    }

                    System.out.println(sortFloat);
                    FileOutputStream fos = new FileOutputStream(saveFile, true);
                    PrintStream p1 = new PrintStream(fos);
                    p1.println();
                    p1.printf(sortFloat);
                    p1.close();
                    JOptionPane.showMessageDialog((Component)null, "好!");
                } catch (FileNotFoundException var12) {
                    var12.printStackTrace();
                } catch (IOException var13) {
                    var13.printStackTrace();
                }

            }
        });
        this.LookButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String fiveFloat = window.this.FloatArea.getText();
                String fileName = window.this.FileArea.getText();

                try {
                    Runtime.getRuntime().exec("explorer D:" + File.separator + "result" + File.separator + fileName + ".txt");
                } catch (IOException var5) {
                    System.out.println("Failed to open D:" + File.separator + "result" + File.separator + fileName + ".txt");
                    System.out.println("(Possible reason ) this file is not exists!");
                }

            }
        });
    }
}

5. 实验结果

 

 

6. 体会

        本次实验,我不仅创建图形化界面实现用户交互,巩固前面所学;而且学习了Java文件输入输出流机制,掌握了一些常见的文件处理方法。

        实验的思路如下:

        保存操作:先从用户界面接收输入的数据和文件名称,读取文件名称创建相应文件,并将数据输入到创建好的文件中进行保存。

        排序并保存操作:先将文件中的数据读取出来放入数组中,利用数组的sort()方法对其从小到大排序,最后将数组逆序存入文件中,此时就完成了数据从大到小的排序存入。保存操作与上相同。在写字节或字符时,我先把写入的数据填充到内部缓冲区,然后一次性写入到目标数据源中,从而提高了I/O流的读取效率。

        读取文件操作:利用RunTime.getRuntime().exec命令在windows下直接调用相关文件。

        在实验中,我将分隔符用/表示,但已知无法找到文件;最后查阅资料发现在window中的分隔符是\,在Linux 中的分隔符是/,故为了避免在上传或者下载时找不到文件,常用File.separator来代替路径分隔符。

        通过本次实验,我知道了Java中IO流操作的基本流程:先使用File类定位一个文件,然后通过字节流或字符流的子类进行流对象的实例化,再进行读/写操作,最后关闭字节或字符流。其关键在于选取不同的IO类实例化,以便完成不同的功能。

        并且,对于输入输出流的异常处理机制我也有了更深的理解:FileInputStream类用来打开一个输入文件,若要打开的文件不存在,则会产生异常File Not Found Exception,必须捕获或生命抛出;FileOutputStream类用来打开一个输出文件,若要打开的文件不存在,则会创建一个新的文件,否则源文件的内容会被新写入的内容所覆盖;在进行文件的读/写操作时,也会产生非运行时异常IOException,也需要捕获或声明抛弃。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阮阮的阮阮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值