Java 流与文件操作

实验要求:
设计程序实现比较文件写入操作中,使用FileWriter、FileOutputStream、BufferWriter、BufferOutputStream这四个类的效率,通过写入的耗时来判断效率的高低。
实验步骤:
依次输出的文件大小为:10M、100M、200M、1G、2G;
总共进行5次输出实验,每次输出后记录各种方式的耗时情况,使用可视化的方式比较耗时。给出结论。

Trade.java
依次输出文件这个的大小的判断和选择,我是按照一本电子小说来分类的,注释中有介绍,按照一行数据这样的形式来进行转换,其次,说是输出文件,但我这里面并没有额外的处理,就是单纯依赖Eclipse存储的工作区间,然后学校机房25 G的内存被全部占满,在数据处理的时候,可以适当缩小比例。

import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;

public class Trade {
	//500000字=1M=100000行数据
	//10M=1000000行
	//100M=10000000行
	//200M=20000000行
	//1G=102400000行
	//2G=204800000行
    private static final int COUNT =1000000 ;
    /**
     * 比较时间
     */
    public void compareTime() {
        System.out.println("====start======");
        useFileWriter();
        useFileOStream();
        useBufferOStream();
        useBufferedWriter();
        System.out.println("=====end========");
    }
    
    
     
    /**
     * 使用FileWriter
     */
    public void useFileWriter() {
        try {
            File file = new File("text01.txt");
            if (!file.exists()) {
                file.createNewFile();
            }
            FileWriter t = new FileWriter(file,true);
            long begin = System.currentTimeMillis();
            for (int i = 0; i < COUNT; i++) {
                t.write("java--测试写文件 fos\r\n");
            }
            t.flush();
            t.close();
            System.out.println("FileWriter 执行耗时: " + (System.currentTimeMillis() - begin));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    
    

    /**
     * 使用FileOutputStream
     */
    public void useFileOStream() {
        try {
            File file = new File("text02.txt");
            if (!file.exists()) {
                file.createNewFile();
            }
            FileOutputStream fos = new FileOutputStream(file,true);

            long begin = System.currentTimeMillis();
            for (int i = 0; i < COUNT; i++) {
                fos.write("java--测试写文件 fos\r\n".getBytes());
            }
            fos.flush();
            fos.close();
            System.out.println("FileOutputStream执行耗时: " + (System.currentTimeMillis() - begin));
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /**
     * 使用BufferedOutputStream
     */
    public void useBufferOStream() {
        try {
            File file = new File("text03.txt");
            if (!file.exists()) {
                file.createNewFile();
            }
            FileOutputStream fos = new FileOutputStream(file,true);
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            long begin = System.currentTimeMillis();
            for (int i = 0; i < COUNT; i++) {
                bos.write("java--测试写文件 fos\r\n".getBytes());
            }
            bos.flush();
            bos.close();
            System.out.println("BufferedOutputStream执行耗时: " + (System.currentTimeMillis() - begin));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 使用BufferedWriter
     */
    public void useBufferedWriter() {
        try {
            File file = new File("text04.txt");
            if (!file.exists()) {
                file.createNewFile();
            }
            FileWriter fWriter = new FileWriter(file,true);
            BufferedWriter bufferedWriter = new BufferedWriter(fWriter);
            long begin = System.currentTimeMillis();
            for (int i = 0; i < COUNT; i++) {
                bufferedWriter.write("java--测试写文件 fos\r\n");
            }
            bufferedWriter.flush();
            bufferedWriter.close();
            System.out.println("BufferedWriter 执行耗时: " + (System.currentTimeMillis() - begin));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

Test.java

public class Test {
	public static void main(String [] args){
		Trade trade = new Trade();
		trade.compareTime();
	}
}

根据每个人情况不同,以下数据也存在差异,这里我考虑到自己电脑的存储,还是尽可能的把数据放缩得比较小,然后就可能存在差异。
10 M时,四个类的耗时
在这里插入图片描述
100 M时,四个类的耗时
在这里插入图片描述
200 M时,四个类的耗时
在这里插入图片描述
1 G时,四个类的耗时
在这里插入图片描述
2 G时,四个类的耗时
在这里插入图片描述

最后,有一个可视化处理,我以为要用到Java里面的可视化界面,然后就需要添加相应插件,其实就是简单做一个图表,柱状图之类的都行,其实就是把我以上四个图的数据再处理,这个我之后再放出来吧。

发布了43 篇原创文章 · 获赞 61 · 访问量 5120

猜你喜欢

转载自blog.csdn.net/qq_44735533/article/details/103534697
今日推荐