2013-06-21 5 views
-3

У меня есть текстовый файл, как это:Чтение из текстового файла в Java

Item 1 
Item 2 
Item 3 

мне нужно, чтобы быть в состоянии прочитать каждый «Item X» в строку, а в идеале хранить все строки в качестве вектора/ArrayList.

Я пробовал:

InputStream is = new FileInputStream("file.txt"); 
is.read(); //looped for every line of text 

, но это, кажется, только обрабатывать целые числа.

Thanks

+3

_but, который, кажется, обрабатывает целые числа. Это нормальное поведение. Из JavaDocs: _read(): Считывает ** следующий байт данных ** из входного потока ._ – BackSlash

+1

То, что он сказал, правильно, вы должны декодировать байты обратно в символы. Проверьте это ... http://www.javamex.com/tutorials/io/character_stream_reader.shtml – Jackie

+1

-1 для того, чтобы не делать ** никаких ** исследований по API-интерфейсам Javas IO ... – home

ответ

4

У вас есть несколько ответов здесь, самым простым будет сканер (в java.util).

Он имеет несколько удобных методов, как nextLine() и следующий() и nextInt(), так что вы можете просто сделать следующее:

Scanner scanner = new Scanner(new File("file.txt")); 
List<String> text = new ArrayList<String>(); 
while (scanner.hasNextLine()) { 
    text.add(scanner.nextLine()); 
} 

В качестве альтернативы можно использовать BufferedReader (в java.io):

BufferedReader reader = new BufferedReader(new FileReader("file.txt")); 
List<String> text = new ArrayList<String>(); 
for (String line; (line = reader.readLine()) != null;) { 
    text.add(line); 
} 

Однако сканеры, как правило, легче работать.

4

Для этого вам необходимо использовать FileUtils. Он имеет метод, названный readLines

public static List<String> readLines(File file, Charset encoding) throws IOException 

считывает содержимое файла построчно в виде списка строк. Файл всегда закрыт.


См @ комментарий в обратную косую черту, чтобы увидеть, как вы используете InputStream.read() неправильно.


@BackSlash также отметил, вы можете использовать java.nio.file.Files#readAllLines, но только если вы используете Java 1.7 или более поздней версии.

+0

Хотя я согласен с этим методом, я не думаю, что он отвечает на его вопрос. Я думаю, что его проблема больше связана с кодировкой и чтением байтового потока – Jackie

+0

@ Jackie. Я думаю, что он * делает ответ на свой вопрос. Его вопрос заключается в том, как читать текстовый файл в списке. У него проблемы с его методом, потому что он неправильно использует 'read()', но если бы он знал об этой библиотеке в первую очередь, ему было бы все равно, почему 'read()' не работает так, как он хочет. –

+1

Нет необходимости использовать 'FileUtils', также класс' Files' имеет метод readAllLines', поэтому нет необходимости импортировать пакет apache commons для этого. – BackSlash

1
BufferedReader br = new BufferedReader(new FileReader("file.txt")); 
    try { 
     StringBuilder sb = new StringBuilder(); 
     String line = br.readLine(); 
     String [] tmp ; 
     while (line != null) { 
      sb.append(line); 
      tmp = line.Split(" "); 
      line = br.readLine(); 
     } 
     String everything = sb.toString(); 
    } finally { 
     br.close(); 
    } 
2

Вы можете использовать Java 7's Files#readAllLines. Необходим короткий лайнер и не требуется импорт сторонней библиотеки :)

List<String> lines = 
     Files.readAllLines(Paths.get("file.txt"), StandardCharsets.UTF_8); 
Смежные вопросы