为什么 hasNextInt() 在这里返回 false?

Why is hasNextInt() returning false here?

这是我第一次扫描 Java 中的文件。我试图从一个文本文件中读取整数列表,对它们进行操作,然后将它们读取到另一个文件中。初始文件如下所示:

1234
9876
2345

我正在使用 while 循环并使用 hasNextInt 进行读取(在 运行 程序和检查初始文本文件之后,我确定值在那里),但我得到的输出为零新的文本文件,所以我假设 hasNextInt() 返回 false。可以肯定的是,我只是简单地跳过扫描并使用 for 循环直接对每个 ArrayList 元素进行操作,并且输出完美地写入了新文件。这是我的代码:

    try {
        File inFile = new File("input.txt");
        File outFile = new File("output.txt");

        FileWriter inWriter = new FileWriter(inFile);
        FileWriter outWriter = new FileWriter(outFile);
        Scanner inReader = new Scanner(inFile);

        numberArray.add(1234); //Adding numbers to an array that was previously initialized
        numberArray.add(9876);
        numberArray.add(2345);

        System.out.println("The raw numbers are:");

        for (int n : numberArray) {
            inWriter.write(n + "\r\n");
            System.out.println(n);
        }

        System.out.println("\nThe new numbers are:");

        while (inReader.hasNextInt()) {
            int newNumber = inReader.nextInt();
            int checkDigit = (newNumber / 7);
            int finalNumber = (newNumber % checkDigit);
            outWriter.write("" + newNumber + finalNumber + "\r\n");
            System.out.println("" + newNumber + finalNumber);
        }

        inWriter.close();
        outWriter.close();
        inReader.close();

    } catch (FileNotFoundException fnfe) {
        System.out.println("There was a problem with the inFile file");
    } catch (IOException ioe) {
        System.out.println("There was a problem opening the outFile file");
    }

问题是您正在使用扫描仪解析文件。当您获得文件编号时,扫描仪会前进,当您读取完所有编号后,扫描仪会到达末端并停留在那里....在文件末尾大喊有更多的东西要扫描。

所以最后你应该使用数组中存储的数字以避免再次重新扫描整个文件。

这对你有用吗?

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;


public class Main {

  public static void main(String[] args) {
    try {
      ArrayList<Integer> numberArray = new ArrayList<>();
      File inFile = new File("input.txt");
      File outFile = new File("output.txt");

      FileWriter inWriter = new FileWriter(inFile);
      FileWriter outWriter = new FileWriter(outFile);
      Scanner inReader = new Scanner(inFile);

      numberArray.add(1234); // Adding numbers to an array that was previously initialized
      numberArray.add(9876);
      numberArray.add(2345);

      System.out.println("The raw numbers are:");

      for (int n : numberArray) {
        inWriter.write(n + "\r\n");
        System.out.println(n);
      }

      System.out.println("\nThe new account numbers are:");

      for (int newNumber : numberArray) { // re-use the array.. no need to scan the file again.
        int checkDigit = (newNumber / 7);
        int finalNumber = (newNumber % checkDigit);
        outWriter.write("" + newNumber + finalNumber + "\r\n");
        System.out.println("" + newNumber + finalNumber);
      }

      inWriter.close();
      outWriter.close();
      inReader.close();

    } catch (FileNotFoundException fnfe) {
      System.out.println("There was a problem with the inFile file");
    } catch (IOException ioe) {
      System.out.println("There was a problem opening the outFile file");
    }
  }
}

您必须先关闭 inWriter,然后才能从文件中读取数字。

inWriter 在关闭之前不会将文本输出到文件中,因此您的 reader 没有看到任何内容,因为从技术上讲还没有任何内容。

在 inReader 流中再次使用它之前,您不是 flushing/closing inwriter 流。