2012-10-31 15 views
6

Czytam plik tekstowy i próbuję zapisać go w postaci tablicy char według char. Moje podejście (poniżej) wstępnie definiuje tablicę char o początkowej długości 100000 (mój główny problem tutaj). Tak więc, jeśli plik zawiera znaki mniejsze niż ta kwota (problem również w przypadku większej liczby znaków), to w mojej tablicy występują wartości null. Chcę tego uniknąć. Czy istnieje sposób na z góry ustalenie ilości znaków obecnych w pliku tekstowym? A może jest lepsze podejście do przechowywania pliku char przez char?Odczytywanie pliku tekstowego na tablicę znaków w Javie

char buf[] = new char[100000]; 
FileReader fr = new FileReader(filename); 
BufferedReader br = new BufferedReader(fr); 
br.read(buf); 
for(int i = 0; i < buf.length; i++) 
{ 
    //Do stuff here 
} 

Odpowiedz

5

Użyj ArrayList of Characters, aby zaakceptować wartości. Po tym konwertowania ArrayList do tablicy jako

char[] resultArray = list.toArray(new char[list.size()]); 

Należy użyć br.readLine() zamiast br.read() w następujący sposób:

String str; 
while((str = br.readLine())!=null){ 
     str.tocharArray(); 
} 
+0

Próbowałem, ale metoda br.read() akceptuje tylko tablicę znaków. –

+1

następnie nie używaj br.read(), użyj br.readLine i pobierz ciąg znaków, a następnie wypakuj znaki według string.toCharArray() – Arham

2

używać skanera zamiast!

Użyłbym skanera i przeczytałbym wiersz zamiast char przez char, a następnie zapisał go jako ciąg znaków. Jeśli naprawdę chcesz mieć tablicę char, łatwiej jest ją wydobyć później.

Ten funkcjonalnie robi to samo:

String theString = ""; 

File file = new File("data.txt"); 
Scanner scanner = new Scanner(file); 

theString = scanner.nextLine(); 
while (scanner.hasNextLine()) { 
     theString = theString + "\n" + scanner.nextLine(); 
} 

char[] charArray = theString.toCharArray(); 

Plusem jest to, że można dostać się do skorzystania z typu String Java, który obsługuje wszystkie długości i konkatenacji bolesnego biznes dla Ciebie. A metoda String.toCharArray() jest już wbudowana, aby zwrócić tablicę, która jest automatycznie dopasowywana w odpowiedni sposób.

+0

dodajesz dodatkowy znak "\ n". Może powinieneś to usunąć. – Arham

+0

Czytanie w char przez char zwróci znak nowego wiersza dla każdej nowej linii. Skaner zakłada, że ​​chcesz tylko zawartość linii i zamiast tego zwraca łańcuch zakończony znakiem NUL. Rezultat jest taki, że jeśli chcesz mieć jeden gigantyczny ciąg (jak wspomniano w początkowej długości 100000), musisz ponownie dodać je z powrotem między danymi postaci z każdej linii. (Ciąg konkatenacji Java eliminuje zerowe zakończenie między dołączonymi ciągami) Krótko mówiąc, tak powinieneś zrobić to, aby uzyskać identyczne wyniki. – darkpbj

+0

Ciągle nie rozumiem, dlaczego jawnie traktujesz "\ n", gdy nie wiesz, co jest w pliku. Dodajesz noOfLines * new_line_chars do tablicy, a jeden chciałby mieć tylko liczbę znaków, które zapisał w pliku. Wypróbuj program za pomocą tylko jednej linii i zrozumiesz. – Arham

Powiązane problemy