2016-03-29 1 views
0

Я пытаюсь прочитать текст и сохранить каждую строку в новом элементе ArrayList. Нужно ли продолжать чтение и добавление в ArrayList до тех пор, пока оно не дойдет до конца файла или когда читатель не найдет другую строку для чтения?Как скопировать строку txt в ArrayList в java?

Кроме того, что лучше всего использовать? Сканер или BufferedReader?

+0

Да, есть способ сделать это. У каждого есть свои возможности. Взгляните на это для сканера vs bufferedReader. http://stackoverflow.com/questions/2231369/scanner-vs-bufferedreader –

ответ

1

FWIW, если вы используете Java8 , вы можете использовать API-потока, как показано ниже

public static void main(String[] args) throws IOException { 

    String filename = "test.txt"; // Put your filename 
    List fileLines = new ArrayList<>(); 

    // Make sure to add the "throws IOException" to the method 
    Stream<String> fileStream = Files.lines(Paths.get(filename)); 
    fileStream.forEach(fileLines::add);   
} 

Я метод main здесь, просто это в вашем методе и добавьте throws заявление или try-catch блок

Вы также можете конвертировать выше на один лайнер, как

((Stream<String>)Files.lines(Paths.get(filename))).forEach(fileLines::add); 
1

Попробуйте использовать BufferedReader так:

static List<String> getFileLines(final String path) throws IOException { 

    final List<String> lines = new ArrayList<>(); 

    try (final BufferedReader br = new BufferedReader(new FileReader(path))) { 
     string line = null; 
     while((line = br.readLine()) != null) { 
      lines.add(line); 
     } 
    } 

    return lines; 
} 
  • Создать пустой список для результатов идти.
  • Используйте примерочных с-ресурсов Заявление на BufferedReader для безопасного открытия и закрытия файла
  • Чтение строк, пока BufferedReader возвращает не нулевое значение
  • вернуть список
2

Традиционно, вы могли бы сделать эти операции:

  • Создать экземпляр Scanner или BufferedReader
  • Установите условия для постоянного считывания файла (с помощью Scanner, до scanner.hasNextLine(); с BufferedReader, есть еще немного работы)
  • Получите следующую строку и добавьте ее в свой список.

Однако в библиотеке NIO Java 7 вам не нужно вообще этого делать.

Вы можете использовать Files#readAllLines, чтобы выполнить именно то, что вы хотите; не нужно выполнять какую-либо итерацию самостоятельно. Вам необходимо указать путь к файлу и набор символов (т. Е. Charset.forName("UTF-8");), но он работает по существу тем же самым.

Path filePath = Paths.get("/path/to/file/on/system"); 
List<String> lines = Files.readAllLines(filePath, Charset.forName("UTF-8")); 
0

Вы можете использовать

final List<String> lines = 
    Files.lines(Paths.get(path)).collect(Collectors.toList()); 

или вариант с lines(Path, Charset).

1

Поскольку вы хотите прочитать целую строку из определенного текстового файла, я бы рекомендовал вам использовать класс BufferedReader.

Вы можете создать объект BufferedReader так:

BufferedReader br = new BufferedReader(new FileReader(filenName));//fileName is a string 
//that contains the name of the file if its in the same folder or else you must give the relative/absolute path to the file 

Затем используйте функцию Readline() на объекте BufferedReader читать каждую строку файла. Вы можете попробовать что-то вроде следующего.

try 
    { 
     //read each line of the file 
     while((line = br.readLine()) != null)//if it reaches the end of the file rd will be null 
     { 
      //store the contents of the line into an ArrayList object 
     } 
    }catch(IOException ex) 
    { 
     System.out.println("Error"); 
    } 
Смежные вопросы