java上机实验

我们使用的教材是《java简明教程(第三版)》- 皮德常

文件读取并逆序输出

chapter8_3

盲目分析

  小学生放假结束后又要交作业了,你们做完作业没,就在玩,赶紧做作业去。嗯,傻完了。回到正题,今天老师布置了新作业,如上图。我当时没听明白就全部做了吧,其实我只做了第三题,因为都可以实现,并且做出了第三题就等于前俩题都完成了。放心我会一一解释。

  • 我们需要用到前面学习的FileInputStream类的东西
  • 然后第二题实现我们自定义输入文件名,用到Scanner类的I/O
  • 最后实现大小写转换,完成任务

暴力破解

import java.io.*;
import java.util.Scanner;

public class chapter8_3 {
    public static void main(String[] AUG) throws IOException {
        // initial the variable
        int k = 0;
        BufferedReader dup_in = null;
        BufferedReader in = null;
        // input from the keyboard
        Scanner cin = new Scanner(System.in);
        String fileName = cin.nextLine();
        cin.close();
        // using BufferedReader to read file
        dup_in = new BufferedReader(new FileReader("./src/chapter8/"+fileName));// use to count how many lines
        in = new BufferedReader(new FileReader("./src/chapter8/"+fileName));

        String lines[] = new String[(int) dup_in.lines().count()];

        while(true) {
            String l = in.readLine();
            if (l != null) {
                lines[k++] = l.toUpperCase();// Case conversion
            } else {
                break;
            }
        }
        while(lines.length > 0 && k > 0){// Reverse output
            System.out.print(lines[--k]);
            System.out.println();
        }
        // close the file
        dup_in.close();
        in.close();
    }
}

运行实例:
chapter8_3-1

  BufferedReader(以及其他Buffer类)这个类读取是有缓冲区的读写文件,相对于DataInputStream(以及其他非Buffer类)类来说,它读写更加的快,快在它一次性读完8192个字节,而DataInputStream等类只能一个一个字节读,对于文件大的读写来说,快的不是一点半点。
  顺带一提的是,dup_in是为了读取文件中的行数,来创建String数组大小,所以调用了函数dup_in.lines().count()(返回long)后,文件流就读完了,因此需要再建一个文件流用来操作,不然再使用readLine()就会返回null。

对于前两题的话,只要把toUpperCase()Scanner那部分删了就好了,其他应该正常运行。灵性一点就会对。


爱狂笑的孩子运气不会差