Мне кажется, проблема в том, чтобы понять, что делает класс Source.Из вашего кода вы ожидаете, что Source.fromFile извлекает содержимое файла, когда в действительности он указывает на начало файла.
Это типично при работе с операциями ввода-вывода, когдаВы должны открыть «соединение» с ресурсом (в данном случае соединение с вашей файловой системой), прочитать / записать несколько раз, а затем закрыть это «соединение».В вашем примере вы открываете соединение с файлом, и вы должны читать строку за строкой содержимое файла, пока не дойдете до конца.Подумайте, что когда вы читаете, вы загружаете информацию в память, поэтому не стоит загружать весь файл в память в большинстве сценариев (что собирается делать mkString).
С другой стороны, mkStringсделано для итерации по всем элементам коллекции, поэтому в данном случае нужно прочитать файл и загрузить массив [String] в память.Будьте осторожны, потому что, если файл большой, ваш код потерпит неудачу, обычно при работе с вводом / выводом вы должны использовать буфер для чтения некоторого контента, затем обрабатывать / сохранять этот контент и затем загружать больше контента (в тот же буфер), избегая проблемс памятью.Например, чтение 5 строк -> анализ -> сохранение проанализированных строк -> чтение следующих 5 строк -> и т. Д.
Вы также можете понять, что toString ничего не возвращает ... просто говорит вам«Вы можете читать строки, файл не пустой».