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 {
        }

    }
}
發佈了50 篇原創文章 · 獲贊 12 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章