Java lendo um arquivo em um ArrayList?

Como você lê o conteúdo de um arquivo em um ArrayList em Java?

Aqui está o conteúdo do arquivo:

 cat house dog . . . 

Basta ler cada palavra na ArrayList .

Este código java lê cada palavra e a coloca na ArrayList:

 Scanner s = new Scanner(new File("filepath")); ArrayList list = new ArrayList(); while (s.hasNext()){ list.add(s.next()); } s.close(); 

Use s.hasNextLine() e s.nextLine() se quiser ler linha por linha em vez de palavra por palavra.

Um one-liner com commons-io :

 List lines = FileUtils.readLines(new File("/path/to/file.txt"), "utf-8"); 

O mesmo com goiaba :

 List lines = Files.readLines(new File("/path/to/file.txt"), Charset.forName("utf-8")); 

Você pode usar:

 List list = Files.readAllLines(new File("input.txt").toPath(), Charset.defaultCharset() ); 

Fonte: API do Java 7.0

No Java 8 você pode usar streams e Files.lines :

 List list = null; try (Stream lines = Files.lines(myPathToTheFile))) { list = lines.collect(Collectors.toList()); } catch (IOException e) { LOGGER.error("Failed to load file.", e); } 

Ou como uma function incluindo o carregamento do arquivo do sistema de arquivos:

 private List loadFile() { List list = null; URI uri = null; try { uri = ClassLoader.getSystemResource("example.txt").toURI(); } catch (URISyntaxException e) { LOGGER.error("Failed to load file.", e); } try (Stream lines = Files.lines(Paths.get(uri))) { list = lines.collect(Collectors.toList()); } catch (IOException e) { LOGGER.error("Failed to load file.", e); } return list; } 

A forma mais simples que encontrei é …

 List lines = Files.readAllLines(Paths.get("/path/to/file.txt")); 
 List words = new ArrayList(); BufferedReader reader = new BufferedReader(new FileReader("words.txt")); String line; while ((line = reader.readLine()) != null) { words.add(line); } reader.close(); 

Você pode, por exemplo, fazer isso desta forma (código completo com exceções handlig):

 BufferedReader in = null; List myList = new ArrayList(); try { in = new BufferedReader(new FileReader("myfile.txt")); String str; while ((str = in.readLine()) != null) { myList.add(str); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (in != null) { in.close(); } } 
 //CS124 HW6 Wikipedia Relation Extraction //Alan Joyce (ajoyce) public List addWives(String fileName) { List wives = new ArrayList(); try { BufferedReader input = new BufferedReader(new FileReader(fileName)); // for each line for(String line = input.readLine(); line != null; line = input.readLine()) { wives.add(line); } input.close(); } catch(IOException e) { e.printStackTrace(); System.exit(1); return null; } return wives; } 

Aqui está uma solução que funcionou muito bem para mim:

 List lines = Arrays.asList( new Scanner(new File(file)).useDelimiter("\\Z").next().split("\\r?\\n") ); 

Se você não quer linhas vazias, você também pode fazer:

 List lines = Arrays.asList( new Scanner(new File(file)).useDelimiter("\\Z").next().split("[\\r\\n]+") ); 

Aqui está um exemplo inteiro do programa:

 import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Scanner; public class X { public static void main(String[] args) { File f = new File("D:/projects/eric/eclipseworkspace/testing2/usernames.txt"); try{ ArrayList lines = get_arraylist_from_file(f); for(int x = 0; x < lines.size(); x++){ System.out.println(lines.get(x)); } } catch(Exception e){ e.printStackTrace(); } System.out.println("done"); } public static ArrayList get_arraylist_from_file(File f) throws FileNotFoundException { Scanner s; ArrayList list = new ArrayList(); s = new Scanner(f); while (s.hasNext()) { list.add(s.next()); } s.close(); return list; } } 

Adicione este código para ordenar os dados no arquivo de texto. Collections.sort(list);