Объекты File и Scanner для открытия и чтения данных в Java

В моем учебнике написано следующее:

Вы также можете использовать класс Scanner для чтения входных данных из файла. Вместо передачи System.in конструктору класса Scanner вы передаете ссылку на объект File. Вот пример:

File myFile = new File("Customers.txt");
Scanner inputFile = new Scanner(myFile);

Первая инструкция создает экземпляр класса File. Класс File находится в Java API и используется для представления файла. Обратите внимание, что мы передали конструктору строку Customers.txt. При этом создается объект File, представляющий файл Customers.txt.

Во втором операторе мы передаем ссылку на этот объект File в качестве аргумента конструктору класса Scanner. При этом создается объект Scanner, который использует файл Customers.txt в качестве источника входных данных.

Мой вопрос: я не могу понять, зачем нам нужен объект File? Разве мы не можем написать приведенный выше код, как показано ниже, для чтения файлов?

Scanner inputFile = new Scanner("Customers.txt");

Если Java нуждается в объекте File и объекте Scanner, как именно он работает?


person Sam Vitare    schedule 09.08.2020    source источник


Ответы (2)


Вам нужно передать объект File в конструктор сканера, чтобы вызвать Scanner(File source), а не Scanner(String source) конструктор. Если вы используете строку "Customers.txt" в качестве аргумента, будет использоваться конструктор со строкой в ​​качестве аргумента, и он будет создавать значения, отсканированные из указанной строки, как описано в документации, а не из файла, как вы хотите. .

person dariosicily    schedule 09.08.2020

Я считаю, что здесь происходит то, что класс сканера требует, чтобы вы вводили примитивный тип данных (также известный как String, int и т. д.), а не путь.

Scanner inputFile = new Scanner("Customers.txt");

Если вы напишете приведенный выше код и отобразите его, он будет просто пустым, поскольку класс сканера не сможет понять ваш параметр. С другой стороны, класс File принимает путь в качестве параметра и создает файловый объект, который можно использовать в качестве параметра для класса Scanner. Следовательно, вам нужно создать файловый объект перед использованием класса сканера.

person Jason Somoglou    schedule 09.08.2020