实验8 Java I/O流 与文件读写

    • 实验目的  
1. 理解I/O流的概念,掌握其分类
2. 掌握文本文件读写、二进制文件读写
    • 实验内容 
1. 分别使用FileWriter 和 BufferedWriter 往文件中写入1万个随机数,比较用时的多少?(用时采用方法System.currentTimeMillis())求时间差;
使用:FileWriter
程序源代码

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;

public class WriteRandomNumbers {
    public static void main(String[] args) throws IOException {
        Random random = new Random();

        // Write using FileWriter
        long startTime = System.currentTimeMillis();
        FileWriter fileWriter = new FileWriter("numbers_1.txt");
        for (int i = 0; i < 10000; i++) {
            fileWriter.write(String.valueOf(random.nextInt()));
            fileWriter.write("\n");
        }
        fileWriter.close();
        long endTime = System.currentTimeMillis();
        long timeTaken = endTime - startTime;
        System.out.println("Time taken using FileWriter: " + timeTaken + " milliseconds");

        // Write using BufferedWriter
        startTime = System.currentTimeMillis();
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("numbers_2.txt"));
        for (int i = 0; i < 10000; i++) {
            bufferedWriter.write(String.valueOf(random.nextInt()));
            bufferedWriter.write("\n");
        }
        bufferedWriter.close();
        endTime = System.currentTimeMillis();
        timeTaken = endTime - startTime;
        System.out.println("Time taken using BufferedWriter: " + timeTaken + " milliseconds");
    }
}

程序运行结果贴图


使用:BufferedWriter
程序源代码

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;

public class WriteRandomNumbers {
    public static void main(String[] args) throws IOException {
        Random random = new Random();

        // Write using FileWriter
        long startTime = System.currentTimeMillis();
        FileWriter fileWriter = new FileWriter("numbers_1.txt");
        for (int i = 0; i < 10000; i++) {
            fileWriter.write(String.valueOf(random.nextInt()));
            fileWriter.write("\n");
        }
        fileWriter.close();
        long endTime = System.currentTimeMillis();
        long timeTaken = endTime - startTime;
        System.out.println("Time taken using FileWriter: " + timeTaken + " milliseconds");

        // Write using BufferedWriter
        startTime = System.currentTimeMillis();
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("numbers_2.txt"));
        for (int i = 0; i < 10000; i++) {
            bufferedWriter.write(String.valueOf(random.nextInt()));
            bufferedWriter.write("\n");
        }
        bufferedWriter.close();
        endTime = System.currentTimeMillis();
        timeTaken = endTime - startTime;
        System.out.println("Time taken using BufferedWriter: " + timeTaken + " milliseconds");
    }
}


程序运行结果贴图


    2. 课本P547,19.2 :编写一个文件,如果文件Exercise 19_2.dat 不存在,就创建一个名为Exercise 19_2.txt的文件。向这个文件追加新数据。使用二进制I/O将100个随机生成的整数写入这个文件中。
程序源代码

import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;

public class WriteFile {
    public static void main(String[] args) throws IOException {
        // Check if file Exercise 19_2.dat exists
        File file = new File("Exercise 19_2.dat");
        if (!file.exists()) {
            // If file does not exist, create Exercise 19_2.txt and write to it
            file = new File("Exercise 19_2.txt");
            BufferedOutputStream bufferedOutput = new BufferedOutputStream(new FileOutputStream(file));
            DataOutputStream output = new DataOutputStream(bufferedOutput);

            Random random = new Random();
            for (int i = 0; i < 100; i++) {
                output.writeInt(random.nextInt());
            }

            output.close();
        }
    }
}

程序运行结果贴图

    3. (对二进制数据文件中的所有数据求和)假设已经使用DataOutputStream中的writeInt(int)创建一个名为Exercise 19_3.dat的二进制数据文件,文件包含数目不确定的整数,编写一个程序来计算这些整数的总和。
程序源代码

import java.io.*;

public class SumInt {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("Exercise 19_2.txt");
        DataInputStream dis = new DataInputStream(fis);

        int sum = 0;
        while (dis.available() > 0) {
            int number = dis.readInt();
            sum += number;
        }

        dis.close();

        System.out.println("Sum: " + sum);
    }
}

程序运行结果贴图


    4. 在文本文件bigbook.txt中包含有很长篇幅的英语短文,编写程序要求统计文件的所有短文中包含英文字母“A”的个数,并显示统计的时间。
程序源代码

import java.io.DataInputStream;
        import java.io.FileInputStream;
        import java.io.IOException;

public class EnglishRead {
    public static void main(String[] args) throws IOException {
        DataInputStream input = new DataInputStream(
                new FileInputStream("src/bigbook.txt"));
        int s,number=0;
        long start = System.currentTimeMillis();
        while((s = input.read()) != -1){
            if ((char)s == 'A')
                number++;
            System.out.print((char)s);
        }
        long stop = System.currentTimeMillis();
        long a = stop-start;
        System.out.println("\n\nThe number of A is "+number);
        System.out.println("It takes "+a+" milliseconds");
    }
}


程序运行结果贴图

5.编写一个Java应用程序,给当前的类所在的文件ReadExample.java添加行号拷贝到另一个文件temp.text。

程序源代码

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class ReadExample {
    public static void main(String[] args) throws IOException {

        BufferedReader input = new BufferedReader(new FileReader("src/ReadExample.java"));
        BufferedWriter output = new BufferedWriter(new FileWriter("temp.txt"));

        String c;
        for (int i = 1;(c = input.readLine()) != null ; i++) {
            output.write(i+":"+ c +"\r\n");
        }

        output.close();
        input.close();
    }
}


程序运行结果贴图

 6、(将对象和数组存储在文件中)编写一个程序,向一个名为Exercise19_5.dat的文件中存储一个含5个int值1,2,3,4,5的数组,存储一个表示当前时间的Date对象,存储一个double值5.5

程序源代码

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Date;

public class Test6 {
    public static void main(String[] args) throws IOException, IOException, ClassNotFoundException {
        int[] array = {1,2,3,4,5};
        // 新建文件Exercise19_5.dat
        ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream("Exercise19_5.dat"));
        // 按照题目要求储存
        output.writeObject(array);
        output.writeObject(new Date());
        output.writeDouble(5.5);
        output.close();

        // 输出查看是否储存成功
        ObjectInputStream input = new ObjectInputStream(new FileInputStream("Exercise19_5.dat"));
        int[] array2 = (int[]) input.readObject();
        // 注意输出的顺序一定要和储存的顺序对应
        System.out.println("存储的数组为:"+Arrays.toString(array2));
        System.out.println("存储的Date对象为:"+input.readObject());
        System.out.println("存储的double值为:"+input.readDouble());

    }
}


程序运行结果贴图


7、 (组合文件)编写一个工具程序,使它能够用下面的命令,将文件组合在一起构成一个新文件:
java Exercise19_12 SourceFile1…SourceFilen TargetFile
这个命令将 SourceFile1,…,SourceFilen合并为TargetFile。程序源代码

import java.io.*;

public class Exercise{
    public static void main(String[] args) throws Exception {
        // 检查参数数量
        if (args.length < 2) {
            System.out.println("Usage: java Exercise19_12 SourceFile1…SourceFilen TargetFile");
            System.exit(1);
        }

        // 创建一个字节输出流,用于将数据写入目标文件
        try (BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(args[args.length - 1]))) {
            // 遍历源文件列表
            for (int i = 0; i < args.length - 1; i++) {
                // 创建一个字节输入流,用于从源文件读取数据
                try (BufferedInputStream input = new BufferedInputStream(new FileInputStream(args[i]))) {
                    // 定义一个字节数组,用于保存读取的数据
                    byte[] buffer = new byte[4096];

                    // 读取源文件的数据,并写入目标文件
                    int bytesRead;
                    while ((bytesRead = input.read(buffer)) != -1) {
                        output.write(buffer, 0, bytesRead);
                    }
                }
            }
        }
    }
}

程序运行结果贴图

执行命令

待拼接文件

组合文件


8、设计一个复数类Complex,并在该类中实现将对象自身保存到文件的功能,实例方法void save(String fileName);从文件恢复数据的静态方法static Complex load(String fileName)
程序代码:

iimport java.io.*;
import java.io.IOException;

public class Complex implements Serializable {
    private double real;
    private double imaginary;

    public Complex(double real, double imaginary) {
        this.real = real;
        this.imaginary = imaginary;
    }

    public double getReal() {
        return real;
    }

    public double getImaginary() {
        return imaginary;
    }

    public void save(String fileName) {
        try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fileName))) {
            out.writeObject(this);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static Complex load(String fileName) {
        try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName))) {
            return (Complex) in.readObject();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
            return null;
        }
    }
    public static void main(String[] args) {
        // 创建一个复数对象
        Complex c1 = new Complex(1.0, 2.0);
        System.out.println("c1: " + c1.getReal() + " + " + c1.getImaginary() + "i");

        // 保存复数对象到文件
        c1.save("complex.dat");

        // 从文件加载复数对象
        Complex c2 = Complex.load("complex.dat");
        System.out.println("c2: " + c2.getReal() + " + " + c2.getImaginary() + "i");
    }

}

程序运行结果贴图

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,关于Java I/O操作读写本地图片,可以使用以下步骤: 1. 使用FileInputStream或FileOutputStream类来读写文件。 2. 创建一个File对象,指定要读写的文件路径。 3. 创建一个InputStream或OutputStream对象,将File对象传递给它们。 4. 使用read()或write()方法来读写文件内容。 5. 关闭输入输出文件对象。 以下是一个简单的示例代码,可以读取本地图片并将其写入到另一个文件中: ```java import java.io.*; public class ImageIOExample { public static void main(String[] args) { try { // 创建一个File对象,指定要读取的图片路径 File inputFile = new File("input.jpg"); // 创建一个File对象,指定要写入的图片路径 File outputFile = new File("output.jpg"); // 创建一个输入对象,读取inputFile中的内容 FileInputStream inputStream = new FileInputStream(inputFile); // 创建一个输出对象,将内容写入outputFile中 FileOutputStream outputStream = new FileOutputStream(outputFile); // 定义一个字节数组,用于存储文件内容 byte[] buffer = new byte[1024]; // 定义一个变量,记录读取到的字节数 int bytesRead = 0; // 读取文件内容到字节数组中,直到读取完毕 while ((bytesRead = inputStream.read(buffer)) != -1) { // 将字节数组中的内容写入到输出中 outputStream.write(buffer, 0, bytesRead); } // 关闭输入输出 inputStream.close(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 以上代码将会读取名为`input.jpg`的图片,并将其写入到名为`output.jpg`的文件中。需要注意的是,如果要读写其他类型的文件,只需要将文件名和文件类型(例如jpg)替换即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

+720

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

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

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

打赏作者

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

抵扣说明:

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

余额充值