如何将Java中的文本文件读入数组

时间:2017-10-12 12:14:26

标签: java

如何使用Java读取文本文件,如下所示: 6 - 是元素的总数,它放在第一行 5 1 6 3 2 - 这是数组编号,它位于第二行

我尝试使用扫描程序,使用分隔符,但是我在第一行得到异常,线程“main”中的异常java.util.InputMismatchException

所以6是元素的总数,nextline是元素的数组。我想在这个算法上实现一个能找到缺失数字的算法(在我们的例子中为4)。但我的问题是如何阅读文件,而不是如何实现算法..

这是代码:

List<Integer> temps = new ArrayList<>();

        try (Scanner scanner = new Scanner(new BufferedReader(new FileReader("fisier.txt")))) {
            scanner.useDelimiter(" ");
            while (scanner.hasNextLine()) {
                int number = scanner.nextInt();
                scanner.nextLine();
                int data = scanner.nextInt();
                scanner.skip(scanner.delimiter());
                temps.add(number);
                temps.add(data);
            }

            Integer[] tempsArray = temps.toArray(new Integer[0]);
            for (Integer s : tempsArray) {
                System.out.println(s);
            }



        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

3 个答案:

答案 0 :(得分:0)

BufferedReader br;
FileInputStream fin;

try {
    fin = new FileInputStream(fileName);
    br = new BufferedReader(new InputStreamReader(fin));

    // Read and Split a line.
    String line = br.readLine().trim();
    String[] attributes = line.split(" ");

    // cast to int and get values
    List<Integer> numbers = new ArrayList<>();
    for(String attribute : attributes) {
        numbers.add(Integer.parseInt(attribute);
    }

    // Sort it ascending
    Collections.sort(numbers);

    // algorithm to find missing one
    // first+last one can´t be wrong so it´s working
    int checkValue = numbers.get(0);
    int missing;
    for(Int number : numbers) {
        if(checkvalue != number) {
            missing = checkValue;
            break;
        }
        checkValue++;
    }

    System.out.println("Missing Number: " + missing):

    fin.close();
    br.close();
} catch (FileNotFoundException e) {
    System.err.println("Your Message");
} catch (IOException e) {
    System.err.println("Your Message");
}

答案 1 :(得分:0)

这会将文件逐行读入一个数组列表,以便循环解析该数字。您可以使用Apache commons IO来执行FileUtils.downloadToFile

List<String> data = new ArrayList<>;
BufferedReader br = new BufferedReader (new FileReader(new File("data.txt")));
String line = null;
while ((line = br.readLine()) != null)
     data.add(line);
br.close();

答案 2 :(得分:0)

由于某种原因,nextInt()不喜欢文本文件,我已经使用方法scanner.hasNext()来控制它并使用Integer.valueOf(scanner.next())来返回一个int值。

while (scanner.hasNextLine()) {
    if(scanner.hasNext());
       int number = Integer.valueOf(scanner.next());
    scanner.nextLine();
    if(scanner.hasNext());                  
        int data = Integer.valueOf(scanner.next());
    scanner.skip(scanner.delimiter());
    temps.add(number);
    temps.add(data);
}

确保您的文件仅包含可转换为int值,您可以进行如下控件:

String dataS = scanner.next();
if(StringUtils.isNumeric(String dataS))
     int data = Integer.valueOf(dataS);

StringUtils.isNumeric()来自 Apache Commons