Как да попълня ArrayList от думи в текстов файл?

Имам текстов файл, съдържащ думи, разделени с нов ред, като следния формат:

>hello  
>world  
>example 

Как да създам ArrayList и да съхраня всяка дума като елемент?


person Deepankar Bajpeyi    schedule 01.04.2012    source източник
comment
Изглежда като обикновена домашна работа - моля, добавете етикета, ако е така.   -  person Andreas Dolk    schedule 01.04.2012


Отговори (6)


Можете да използвате apache commons FileUtils.readLines().

Мисля, че List, което връща, вече е ArrayList, но можете да използвате конструктора ArrayList(Collection), за да сте сигурни, че ще получите такъв.

person amit    schedule 01.04.2012

public static void main(String[] args) throws IOException{ // TODO Автоматично генериран метод мъниче

    File file = new File("names.txt");
    ArrayList<String> names = new ArrayList<String>();
    Scanner in = new Scanner(file);
    while (in.hasNextLine()){
        names.add(in.nextLine());
    }
    Collections.sort(names);
    for(int i=0; i<names.size(); ++i){
        System.out.println(names.get(i));
    }
person daniel owens    schedule 28.11.2012

Най-лесният начин е да използвате Guava:

File file = new File("foo.txt");
List<String> words = Files.readLines(file, Charsets.UTF_8);

(Не е гарантирано, че е ArrayList, но се надявам това да няма значение.)

person Jon Skeet    schedule 01.04.2012

Четете файла ред по ред, създавате ArrayList за низове и добавяте line.substring(1) към дефинирания ArrayList, ако line.length>0.

person dexametason    schedule 01.04.2012
comment
Използвах line.substring(1), защото неговият образец съдържа, че той има '›' в началото на всеки ред. - person dexametason; 01.04.2012

Поставям файла в "C:\file.txt"; ако изпълните следното, то попълва ArrayList с думите и ги отпечатва.

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;


public class Main {

    public static void main(String[] args) throws Exception {
        File file = new File("C:\\file.txt");
        BufferedReader br = new BufferedReader(new FileReader(file));
        List<String> lines = new ArrayList<String>();
        String line = br.readLine();
        while(line != null) {
            lines.add(line.replace(">", ""));
            line = br.readLine();
        }
        for(String l : lines) {
            System.out.println(l);
        }
    }

}
person Tom    schedule 01.04.2012
comment

Забравих да актуализирам това: Ebohlman ме постави на правилния път.

Следващият беше i18. Когато извиква един от методите init, той настройва маршрути и принуждава app.router да бъде принуден в стека на манипулатора по-рано. Лошото ми е, че не разбрах, че част от кода взаимодейства с обекта на приложението и това го направи. Нямаше начин въпросът да получи по-добър отговор от това как той се справи с информацията, която дадох, така че отбелязвам отговора му като правилен.

Трябва да опитам да спя повече v.v

- person Jon Skeet; 01.04.2012
comment
да, добре, може да има нужда от полиране, но прави това, което се иска. - person Tom; 01.04.2012

Сигурен съм, че има много библиотеки, които правят това с 1 ред, но ето "чиста" реализация на Java:

Забележете, че сме "опаковали"/"декорирали" и т.н. стандартен FileReader (който чете само един байт наведнъж) с BufferedReader, което ни дава по-хубав метод readLine().

BufferedReader reader = null;
try {
    reader = new BufferedReader(new InputStreamReader(
            new FileInputStream("test.txt"),
            Charset.forName("ISO-8859-1")));
    List<String> lines = new ArrayList<String>();
    String line;
    while ((line = reader.readLine()) != null) {
        lines.add(line);
    }
    System.out.println(lines);
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (reader != null) {
        reader.close();
    }
}
person Adam    schedule 01.04.2012
comment
Имайте предвид, че това ще използва стандартното кодиране на знаци, което обикновено не е добра идея. Бих предложил да използвате InputStreamReader, обвит около FileInputStream. Освен това повикването close трябва да бъде в блок finally. Бих предложил да оставите балончето IOException да изскочи и до обаждащия се. - person Jon Skeet; 01.04.2012