2013-04-19 16 views
9

wszystko, mam teraz do czynienia z problemem braku pomysłu na przechowywanie zawartości w pliku tekstowym do tablicy. Sytuacja jest jak zawartość pliku tekstowego:Przechowuj zawartość pliku tekstowego wiersz po wierszu do tablicy

abc1 
xyz2 
rxy3 

pragnę zapisać je do tablicy po linii, jest to możliwe? Czego oczekuję, to:

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

Próbowałem czegoś takiego, ale wydaje mi się, że nie działa dla mnie. Jeśli ktoś może mi pomóc, bardzo dziękuję.

Kod jest:

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

* „ale wydaje się nie działać dla mnie” Co spowodowało błąd lub wyjątek? Skopiuj/wklej to na forum jako [edytuj do pytania] (http://stackoverflow.com/posts/16100175/edit). –

+0

Jeśli chcesz cały wiersz w każdym elemencie tablicy, dlaczego dzielisz go? – NilsH

+0

Myślałem, że podział ("") może mi pomóc odróżnić kolejną linię? tak, że może stać się lien 1,2,3 .. – salemkhoo

Odpowiedz

18

Polecam przy użyciu ArrayList, która obsługuje dynamiczne zmiany rozmiaru, natomiast tablica będzie wymagać określonej wielkości z przodu, który może nie wiedzieć. Zawsze możesz zawrócić listę z powrotem do tablicy.

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

Dzięki za wskazówki, Kevin, naprawdę mi pomożesz, dziękuję! – salemkhoo

+0

cześć Kevin, dziękuję za odpowiedź, mam wątpliwości, w jaki sposób mogę wydrukować stringArr, kiedy próbowałem wydrukować stringArr otrzymuję niektóre wyniki jak [Ljava.lang.String; @ 17bd8e. Czy ktoś może zasugerować mi, jaki jest prawidłowy sposób drukowania zawartości stringArr. – Chinmoy

1

Spróbuj tego:

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

Trzeba zrobić coś takiego w Twoim przypadku: -

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

Należy jednak pamiętać, że arr należy prawidłowo zadeklarowane, w zależności od liczby wpisów w twoim pliku.

Sugestia: - Użyj List zamiast (Spójrz na @Kevin Bowersox postu do tego)

1

Kiedy robisz str = in.readLine()) != null przeczytać jedną linię do str zmiennej i jeśli nie jest zerowa wykonać blok while. Nie musisz czytać linii jeszcze raz w arr[i] = in.readLine();. Używaj także list zamiast tablic, gdy nie znasz dokładnego rozmiaru pliku wejściowego (liczba linii).

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

Dzięki za twoje informacje, Secator! – salemkhoo

3

Powinno działać, ponieważ używa listy, ponieważ nie wiesz, ile wierszy będzie w pliku, a także może się zmienić później.

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

dzięki Indoknight! – salemkhoo

+0

Czyste i proste. – JustinBieber

+0

cześć Chłopaki, dziękuję za odpowiedź, mam wątpliwości, w jaki sposób mogę wydrukować lineArray, gdy próbowałem wydrukować lineArray otrzymuję niektóre wyniki jak [Ljava.lang.String; @ d8dc5a. Czy ktoś może zasugerować mi, jaki jest właściwy sposób drukowania zawartości linesArray. – Chinmoy

7

Najprostsze rozwiązanie:

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

Zauważ, że java.nio.file.Files jest od 1,7

1

JAVA 8:

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

Można użyć tego kodu pełny dla swojego problemu. Więcej szczegółów można sprawdzić go na 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)); 
    } 

} 
Powiązane problemy