Java: чтение файла в массив

У меня есть файл (с именем «number.txt»), который я хочу прочитать в массив в Java. Как именно мне это сделать? Это простой "одномерный" файл, содержащий 100 чисел.

Проблема в том, что я каждый раз получаю исключение. По-видимому, он не может его найти (я уверен, что он правильно написан). При просмотре примеров кода он не указывает полный путь к файлу, а только имя самого файла. Как я могу это сделать, если это необходимо?

Кроме того, при чтении файла будет ли массив автоматически содержать все строки файла, или мне придется создать цикл, который копирует каждую строку в соответствующий индекс i?

Я слышал о классе BufferedReader, о его назначении и как он соотносится с чтением ввода?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
31
0
174 282
4

Ответы 4

Вот пример кода, который поможет вам начать работу:

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);
        }
    }
}

Надеюсь это поможет.

Разве bufferedReader.close() не следует обернуть внутрь блока try {} finally {}?

LukeGT 20.04.2013 08:01

@ LukeGT - Да, это должно быть для производственного кода. Эти примеры методов просто вызывают исключение.

toolkit 20.04.2013 12:02

И в наши дни было бы лучше использовать оператор try-with-resources, чем try-finally.

Slaw 20.03.2020 07:38

Вы должны иметь возможность использовать косую черту в 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 уже упоминал, что они видели примеры. Этот ответ не отвечает ни на один из заданных ими вопросов.

allingeek 26.09.2012 06:16

В Java 8 вы можете просто вызвать Files.readAllLines(filePath), что эквивалентно передаче StandardCharsets.UTF_8 в качестве кодировки.

emlai 16.02.2016 01:03

Другие вопросы по теме