Если вы создаете свою программу из командной строки, то есть что-то, называемое «перенаправление ввода», которое вы можете использовать. Вот как это работает:
Давайте предположим, что ваша программа:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class ScanningMultiline
{
public static void main (String[] args)
{
List<String> lines = new ArrayList<>();
try (Scanner scanner = new Scanner (System.in))
{
while (scanner.hasNextLine())
{
lines.add (scanner.nextLine());
}
}
System.out.println ("Total lines: " + lines.size());
}
}
Теперь предположим, что у вас есть вход для вашей программы, подготовленной в файле.
Для компиляции программы вы бы изменить текущий каталог терминала/командной строки в директорию программы, а затем написать:
javac ScanningMultiline.java
А потом бежать, использовать перенаправление ввода, как:
java ScanningMultiline < InputFile.txt
Если ваш InputFile.txt
находится в другом каталоге, просто положить его полный путь вместо того, чтобы, как:
java ScanningMultiline < "/Users/Xyz/Desktop/InputFile.txt"
Другой подход
Вы можете попробовать прочитать ввод непосредственно из файла. Вот как эта программа будет написана:
import java.io.IOException;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class ScanningMultiline
{
public static void main (String[] args)
{
final String inputFile = "/Users/Xyz/Desktop/InputFile.txt";
List<String> lines = new ArrayList<>();
try (Scanner scanner = new Scanner (Paths.get (inputFile)))
{
while (scanner.hasNextLine())
{
lines.add (scanner.nextLine());
}
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println ("Total lines: " + lines.size());
}
}
Этот подход читает непосредственно из файла и помещает строки из файла в списке String.
Другой подход
Вы можете прочитать строки из файла и сохранять их в виде списка в одной строке, а также, как и следующий фрагмент демонстрирует:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class ScanningMultiline
{
public static void main (String[] args) throws IOException
{
final String inputFile = "/Users/Xyz/Desktop/InputFile.txt";
List<String> lines = Files.readAllLines (Paths.get (inputFile));
}
}
Yohanes Khosiawan ответил другой подход, поэтому я не пишу этого здесь.
Ваша цель программы правильная. Неправильный способ подачи многострочного ввода. Попробуйте прочитать из файла, написав: «Сканер сканер = новый сканер (Paths.get (<путь к файлу в строке здесь>));'. Также используйте 'StringBuilder' для добавления строк в' b', так как 'String' является неизменным, поэтому он будет подвержен ошибкам производительности, если вы выполните' + = '. –
извините. я не понял, что вы имеете в виду. –