Java: чтение файла в массив
У меня есть файл (называемый "number.txt" ), который я хочу прочитать в массиве на Java. Как именно я иду вперед и делаю это? Это прямолинейный "1-мерный" файл, содержащий 100 номеров.
Проблема в том, что я получаю исключение каждый раз. По-видимому, он не может найти его (я уверен, что его правильно написано). При просмотре примеров кода он не указывает путь к файлу целиком, а только имя самого файла. Как я буду делать это, если это необходимо?
Кроме того, при чтении файла массив автоматически будет содержать все строки файла, или мне нужно будет создать цикл, который копирует каждую строку в соответствующий индекс i?
Я слышал о классе BufferedReader, в чем его цель и как он коррелирует с чтением ввода?
Ответы
Ответ 1
Вот пример кода, который поможет вам начать:
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()]);
}
}
И пример unit test:
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);
}
}
}
Надеюсь, что это поможет.
Ответ 2
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[]{});
Ответ 3
Apache Commons I/O предоставляет FileUtils # readLines(), который должен быть хорош для всех, кроме огромных файлов: http://commons.apache.org/io/api-release/index.html. В дистрибутив 2.1 входит FileUtils.lineIterator(), который подходит для больших файлов. В библиотеки Google Guava входят аналогичные утилиты.
Ответ 4
Вы должны иметь возможность использовать прямую косую черту в Java, чтобы ссылаться на расположение файлов.
Класс BufferedReader используется для обертывания других файловых читателей. Метод чтения может быть не очень эффективным. Более подробное описание можно найти в Java API.
Использование набора инструментов BufferedReader, вероятно, вам нужно.