У меня есть текстовый файл, содержащий слова, разделенные новой строкой, например, в следующем формате:
>hello
>world
>example
Как создать ArrayList и сохранить каждое слово как элемент?
У меня есть текстовый файл, содержащий слова, разделенные новой строкой, например, в следующем формате:
>hello
>world
>example
Как создать ArrayList и сохранить каждое слово как элемент?
Вы можете использовать общие ресурсы apache FileUtils.readLines()
.
Я думаю, что возвращаемое List
уже является ArrayList
, но вы можете использовать конструктор ArrayList(Collection)
, чтобы убедиться, что вы его получили.
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));
}
Самый простой способ — использовать Guava:
File file = new File("foo.txt");
List<String> words = Files.readLines(file, Charsets.UTF_8);
(Не гарантируется, что это будет ArrayList
, но я надеюсь, что это не имеет значения.)
Вы читаете файл построчно, создаете ArrayList для строк и добавляете line.substring(1) к определенному ArrayList, если line.length>0.
Я помещаю файл в "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);
}
}
}
Я уверен, что есть много библиотек, которые делают это с помощью 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();
}
}
close
должен находиться в блоке finally
. Я бы предложил также позволить IOException
всплывать вызывающему абоненту.
- person Jon Skeet; 01.04.2012