У меня есть файл (с именем «number.txt»), который я хочу прочитать в массив в Java. Как именно мне это сделать? Это простой "одномерный" файл, содержащий 100 чисел.
Проблема в том, что я каждый раз получаю исключение. По-видимому, он не может его найти (я уверен, что он правильно написан). При просмотре примеров кода он не указывает полный путь к файлу, а только имя самого файла. Как я могу это сделать, если это необходимо?
Кроме того, при чтении файла будет ли массив автоматически содержать все строки файла, или мне придется создать цикл, который копирует каждую строку в соответствующий индекс i?
Я слышал о классе BufferedReader, о его назначении и как он соотносится с чтением ввода?




Вот пример кода, который поможет вам начать работу:
package com.acme;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class FileArrayProvider {
public String[] readLines(String filename) throws IOException {
FileReader fileReader = new FileReader(filename);
BufferedReader bufferedReader = new BufferedReader(fileReader);
List<String> lines = new ArrayList<String>();
String line = null;
while ((line = bufferedReader.readLine()) != null) {
lines.add(line);
}
bufferedReader.close();
return lines.toArray(new String[lines.size()]);
}
}
И пример модульного теста:
package com.acme;
import java.io.IOException;
import org.junit.Test;
public class FileArrayProviderTest {
@Test
public void testFileArrayProvider() throws IOException {
FileArrayProvider fap = new FileArrayProvider();
String[] lines = fap
.readLines("src/main/java/com/acme/FileArrayProvider.java");
for (String line : lines) {
System.out.println(line);
}
}
}
Надеюсь это поможет.
@ LukeGT - Да, это должно быть для производственного кода. Эти примеры методов просто вызывают исключение.
И в наши дни было бы лучше использовать оператор try-with-resources, чем try-finally.
Вы должны иметь возможность использовать косую черту в Java для ссылки на расположение файлов.
Класс BufferedReader используется для упаковки других читателей файлов, метод чтения которых может быть не очень эффективным. Более подробное описание можно найти в API Java.
Использование BufferedReader в Toolkit - это, вероятно, то, что вам нужно.
Ввод-вывод Apache Commons предоставляет FileUtils # readLines (), который подходит для всех файлов, кроме огромных: http://commons.apache.org/io/api-release/index.html. Дистрибутив 2.1 включает FileUtils.lineIterator (), который подходит для больших файлов. Библиотеки Google Guava включают аналогичные утилиты.
import java.io.File;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
// ...
Path filePath = new File("fileName").toPath();
Charset charset = Charset.defaultCharset();
List<String> stringList = Files.readAllLines(filePath, charset);
String[] stringArray = stringList.toArray(new String[]{});
@Northener уже упоминал, что они видели примеры. Этот ответ не отвечает ни на один из заданных ими вопросов.
В Java 8 вы можете просто вызвать Files.readAllLines(filePath), что эквивалентно передаче StandardCharsets.UTF_8 в качестве кодировки.
Разве
bufferedReader.close()не следует обернуть внутрь блокаtry {} finally {}?