2013-04-19 3 views
9

все, теперь я столкнулся с проблемой, не связанной с сохранением содержимого в текстовом файле в массиве. Ситуация похожа, текстовое содержимое файла:Хранить содержимое текстового файла по строкам в массив

abc1 
xyz2 
rxy3 

Я хочу, чтобы хранить их в соответствие массив построчно, это возможно? Я ожидаю, что вот так:

arr[0] = abc1 
arr[1] = xyz2 
arr[2] = rxy3 

Я попробовал что-то вроде этого, но, похоже, не работает для меня. Если кто-нибудь может мне помочь, очень спасибо.

Код:

BufferedReader in = new BufferedReader(new FileReader("path/of/text")); 
     String str; 

     while((str = in.readLine()) != null){ 
      String[] arr = str.split(" "); 
      for(int i=0 ; i<str.length() ; i++){ 
       arr[i] = in.readLine(); 
      } 
     } 
+1

* «но кажется, что не работает для меня» * Какие ошибки или исключение привело? Скопируйте/вставьте его на форум как [править вопрос] (http://stackoverflow.com/posts/16100175/edit). –

+0

Если вам нужна вся строка в каждом элементе массива, почему вы его раскалываете? – NilsH

+0

Я думал, что раскол ("") может помочь мне дифференцировать следующую строку? так что он может стать залогом 1,2,3 .. – salemkhoo

ответ

18

Я рекомендовал бы использовать ArrayList, который обрабатывает динамическое изменение размера, в то время как массив потребует определенного размера фронт, который вы можете не знать. Вы всегда можете вернуть список в массив.

BufferedReader in = new BufferedReader(new FileReader("path/of/text")); 
String str; 

List<String> list = new ArrayList<String>(); 
while((str = in.readLine()) != null){ 
    list.add(str); 
} 

String[] stringArr = list.toArray(new String[0]); 
+0

Спасибо, ЛУЧШЕЕ, КЕВИН, ты действительно поможешь мне, спасибо! – salemkhoo

+0

привет Кевин, спасибо за ваш ответ, я сомневаюсь, как я могу напечатать stringArr, когда я попытался напечатать stringArr, я получаю некоторый вывод, например [Ljava.lang.String; @ 17bd8e. Может ли кто-нибудь предложить мне, какой правильный способ распечатать содержимое stringArr. – Chinmoy

1

Попробуйте это:

String[] arr = new String[3];// if size is fixed otherwise use ArrayList. 
int i=0; 
while((str = in.readLine()) != null)   
    arr[i++] = str; 

System.out.println(Arrays.toString(arr)); 
2

Вам нужно сделать что-то подобное для вашего случая: -

int i = 0; 
while((str = in.readLine()) != null){ 
    arr[i] = str; 
    i++; 
} 

Но обратите внимание, что arr должны быть надлежащим образом объявлены, в соответствии с количеством записей в вашем файле.

Предложение: - Используйте List вместо (Посмотрите на @Kevin Бауэрсокс пост для этого)

1

Когда вы str = in.readLine()) != null вы читаете одну строку в str переменной, и если он не пустой выполнить while блок. Вам не нужно читать строку еще раз в arr[i] = in.readLine();. Также используйте списки вместо массивов, когда вы не знаете точный размер входного файла (количество строк).

BufferedReader in = new BufferedReader(new FileReader("path/of/text")); 
String str; 

List<String> output = new LinkedList<String>(); 

while((str = in.readLine()) != null){ 
    output.add(str); 
} 

String[] arr = output.toArray(new String[output.size()]); 
+1

Спасибо за информацию, Secator! – salemkhoo

3

Это должно работать, потому что оно использует List, поскольку вы не знаете, сколько строк будет в файле, а также они могут измениться позже.

BufferedReader in = new BufferedReader(new FileReader("path/of/text")); 
String str=null; 
ArrayList<String> lines = new ArrayList<String>(); 
while((str = in.readLine()) != null){ 
    lines.add(str); 
} 
String[] linesArray = lines.toArray(new String[lines.size()]); 
+0

спасибо Иннок. Ночь! – salemkhoo

+0

Чистый и простой. – JustinBieber

+0

привет, ребята, спасибо за ответ, я сомневаюсь, как я могу напечатать строкиArray, когда я попытался напечатать строкиArray, я получаю некоторый вывод, например [Ljava.lang.String; @ d8dc5a. Может ли кто-нибудь предложить мне, какой правильный способ распечатать содержимое linesArray. – Chinmoy

7

Самое простое решение:

List<String> list = Files.readAllLines(Paths.get("path/of/text"), StandardCharsets.UTF_8); 
String[] a = list.toArray(new String[list.size()]); 

Обратите внимание, что java.nio.file.Files есть с 1,7

1

JAVA 8:

Files.lines(new File("/home/abdennour/path/to/file.txt").toPath()).collect(Collectors.toList()); 
1

Вы можете использовать этот полный код для вашей проблемы. Для получения более подробной информации вы можете проверить его на appucoder.com

class FileDemoTwo{ 
    public static void main(String args[])throws Exception{ 
     FileDemoTwo ob = new FileDemoTwo(); 
     BufferedReader in = new BufferedReader(new FileReader("read.txt")); 
     String str; 
     List<String> list = new ArrayList<String>(); 
     while((str =in.readLine()) != null){ 
      list.add(str); 
     } 
     String[] stringArr = list.toArray(new String[0]); 
     System.out.println(" "+Arrays.toString(stringArr)); 
    } 

}