使用扫描仪和方法从文件中读取

时间:2014-01-23 01:55:57

标签: java arrays file-io methods java.util.scanner

我在弄清楚如何使用扫描仪和方法读取文件时遇到了大麻烦。 这是我的概要:

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;

public class ReadFile1 {
    public static void main(String[] commandlineArgument) {
        Integer[] array = ReadFile1.readFileReturnIntegers(commandlineArgument[0]);
        ReadFile1.printArrayAndIntegerCount(array, commandlineArgument[0]);
    }

    public static Integer[] readFileReturnIntegers(String filename) {
        Integer[] array = new Integer[1000];
        //...?
        return array;
    }

    public static void printArrayAndIntegerCount(Integer[] array, String filename) {
        //...?
    }
}

我正在尝试读取并返回一个数组整数,只包含输入文件中的所有整数。 我对这些方法的运作方式感到困惑,我对如何开始阅读一无所知。

示例输出:

    index = 0, element = 1877
    index = 1, element = 1879
    index = 2, element = 2000

1 个答案:

答案 0 :(得分:1)

您是否阅读了java.util.Scanner课程的API-Docs?他们有一些简短的例子。我只是假设你的整数是由空格分隔的。我宁愿使用Lists,因为您通常不知道文件中有多少整数。如果你真的想拥有一个数组,可以稍后使用List.toArray()

另一个问题是,为什么要在之前创建Scanner实例时将文件名传递给读取函数?

public static Integer[] readFileReturnIntegers(Scanner sc) {
    List<Integer> list = new ArrayList<Integer>();
    while (sc.hasNextInt()) {
        list.add(sc.nextInt());
    }
    return list.toArray(new Integer[list.size()]);
}

要输出数组,我只需使用java.io.PrintWriter。到目前为止,我的示例函数没有进行任何健全性检查,例如检查现有文件等。为了便于阅读,我使用了Java7 try-with-resources Statement语法。如果您仍然使用Java 6,则必须稍微重写try / catch。例如,请参阅this thread

public static void printArrayAndIntegerCount(Integer[] array, String filename) {
    try (PrintWriter pw = new PrintWriter(filename);) {
        pw.println("number of integers in file \"" + filename+ "\" = " + array.length);
        for (int i=0; i<array.length; i++) {
            pw.println("    index = " + i + "; element = " + array[i]);
        }
    }
    catch (Exception e) {
        //handle exceptions
    }
}