Чтобы решить вашу задачу, не обязательно менять `
System.in ` на путь к файлу. В Java вы можете использовать разные экземпляры класса `Scanner` для разных источников ввода: один для `
System.in ` (консольный ввод пользователя) и другой для чтения из файла.
Вы можете реализовать выбор способа считывания следующим образом:
1. Считать число из консоли, используя `Scanner` с `
System.in `.
2. В зависимости от введённого числа, создать новый экземпляр `Scanner` либо для чтения из файла, либо продолжить использовать уже созданный для `
System.in `.
Вот пример кода, который позволяет сделать это:
```java
import java.util.Scanner;
import
java.io .File;
import
java.io .FileNotFoundException;
public class Calculator {
public static void main(String[] args) {
Scanner scanner = null;
System.out.println("Enter 1 for console input or 2 for file input:");
Scanner inputChoiceScanner = new Scanner(
System.in );
int inputChoice = inputChoiceScanner.nextInt();
try {
switch (inputChoice) {
case 1:
scanner = new Scanner(
System.in );
break;
case 2:
scanner = new Scanner(new File("input.txt"));
break;
default:
System.out.println("Invalid input method.");
System.exit(1);
}
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
// Тут ваша логика обработки строки...
}
} catch (FileNotFoundException e) {
System.out.println("File not found.");
} finally {
if (scanner != null) {
scanner.close();
}
inputChoiceScanner.close();
}
}
// Ваши дополнительные методы...
}
```
В этом примере, если пользователь вводит `1`, программа будет ожидать ввода строки из консоли. Если пользователь вводит `2`, программа попытается считать строку из файла `input.txt`. Если файл не найден, будет выброшено исключение `FileNotFoundException`.
Это позволяет вам избежать необходимости менять `
System.in ` и делает ваш код более гибким и чистым.
- Пользователь вводит число
- Этот ввод мы помещаем в switch
- 1 = считывание ввода в консоли
- 2 = считывание с файла
Но есть в этом способе один недостаток:Для считывания цифры (что бы выбрать способ считывания) - мы должны создать экземпляр класса Scanner, с параметром System.in . Если пользователь вводит 1 - мы спокойно используем этот же сканер для считывания, но если 2 - то, что тогда делать? Для считывания с файл надо было указывать путь в параметрах. А создавать отдельный экземпляр сканера для второго ввода - как-то не очень, на мой взгляд. От сюда вопрос: как выйти из этой ситуации? Может возможно как-нибудь System.in поменять на путь к файлу (я не знаю ничего про многопоточность и про то, как именно работает этот класс)? Или какой более удачный способ решить эту задачу? Буду благодарен всем тем, кто поможет.
P.S. ответы GPT мне не так интересны. Если вы просто отвечаете ботом - просто пропустите вопрос(