Java读取文件数据

晚上在研习循环结构程序设计[注]的时候,有一节是关于文件操作的。要求从文件中读入数据,求出它们的最小值、最大值和平均值。入门算法对我们不是问题,不过文件读取还是值得写一下的。
注:相关PDF下载地址是http://download.csdn.net/detail/peerless_hero/9736266

BufferedReader

BufferedReader继承于Reader,它从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。通常Reader的读取请求会导致对底层字符或字节流进行相应的读取请求,因此需要用BufferedReader包装那些read()操作开销很高的Reader(如InputStreamReader)。

使用步骤
1. 先用InputStream获取字节流
2. 再用InputStreamReader将字节流转化成字符流
3. 最后用BufferedReader将字符流以缓存形式输出的方式来快速获取数据流。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class AlgorithmAdvance {

    public static void main(String[] args) {
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;
        int sum = 0;
        try {
            // 得到字符流前需先有字节流,FileInputStream能输出字节流
            // InputStreamReader能将字节流输出为字符流,并为字节流指定字符集
            InputStreamReader is = new InputStreamReader(new FileInputStream(
                    new File("D://Documents/Downloads/datum.txt")), "GBK");
            // 传递一个Reader对象来创建一个BufferedReader对象
            BufferedReader bufferedReader = new BufferedReader(is);
            String lineTxt = null;
            // 读取文本行
            while ((lineTxt = bufferedReader.readLine()) != null) {
                System.out.println(lineTxt);
                int i = Integer.valueOf(lineTxt);
                if (max < i) {
                    max = i;
                }
                if (min > i) {
                    min = i;
                }
                sum += i;
            }
            is.close();
            bufferedReader.close();
            System.out.printf("max:%d,min:%d,sum:%d", max, min, sum);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
        }

    }
}

Scanner

对于上面的程序,如果文件中的数据都写在了一行,那么lineTxt就会取到一个”包含多个数字的字符串”,这给操作带来了不便。我们可以把传递字节流到Scanner对象中,不论数据是分行还是同行,Scanner对象的next方法都会轻松取到想要的数据。

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;

public class AlgorithmAdvance {

    public static void main(String[] args) {
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;
        int sum = 0;
        try {
            // 传递字节流到Scanner对象
            Scanner scanner = new Scanner(new FileInputStream(
                    "D://Documents/Downloads/datum.txt"));
            while (scanner.hasNext()) {
                int i = scanner.nextInt();
                if (max < i) {
                    max = i;
                }
                if (min > i) {
                    min = i;
                }
                sum += i;
                System.out.println(i);
            }
            scanner.close();
            System.out.printf("max:%d,min:%d,sum:%d", max, min, sum);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值