Java: чтение файла в массив - PullRequest
29 голосов
/ 13 ноября 2008

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

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

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

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

Ответы [ 4 ]

65 голосов
/ 13 ноября 2008

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

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

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

38 голосов
/ 26 сентября 2012
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[]{});
4 голосов
/ 20 мая 2011

Ввод / вывод Apache Commons предоставляет FileUtils # readLines (), который подходит для всех, кроме огромных файлов: http://commons.apache.org/io/api-release/index.html. В дистрибутив 2.1 входит FileUtils.lineIterator (), который подходит для больших файлов. В библиотеках Google Guava есть аналогичные утилиты.

0 голосов
/ 13 ноября 2008

Вы должны иметь возможность использовать прямые косые черты в Java для ссылки на расположение файлов.

Класс BufferedReader используется для упаковки других программ чтения файлов, чей метод чтения может быть не очень эффективным. Более подробное описание можно найти в Java APIs .

Использование инструментария BufferedReader, вероятно, то, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...