2012-10-31 38 views
6

我讀的文本文件,並試圖將其保存成字符數組字符一個字符數組。我的方法(下面)預先定義了一個初始長度爲100000的char數組(我的主要問題在這裏)。所以,如果文件包含的字符數量少於這個數量(如果字符數超過這個數字,那麼問題也會出現),那麼我的數組中就會有空值。我想避免這種情況。有沒有辦法預先確定文本文件中的字符數量?或者有沒有更好的方法來存儲char字符?閱讀文本文件轉換成Java中

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 
} 

回答

5

使用字符的ArrayList接受值。該轉換到ArrayList的數組作爲

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

後,您應該使用br.readLine()而不是br.read()如下:

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

我試過,但br.read()方法只接受一個char數組。 –

+1

則不要使用br.read(),使用br.readLine並得到字符串,然後通過string.toCharArray提取字符() – Arham

2

用掃描儀代替!

我會用一臺掃描儀和讀取一行,而不是由炭焦,然後將其保存爲一個字符串。如果你真的想要一個字符數組,事後更容易理解。

這在功能上做同樣的事情:

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(); 

的上攻,這是,你能充分利用它處理所有討厭的長度和連接業務,爲您Java的字符串類型。並且String.toCharArray()方法已經內置,可以返回一個自動調整大小的數組。

+0

要添加一個額外的字符「\ n」。也許你應該刪除它。 – Arham

+0

按字符讀入char將爲每一個新行返回一個換行符。掃描儀假定您只想要該行的內容,並返回一個以空字符結尾的String。結果是如果你想要一個巨大的字符串(如100000的初始長度所暗示的那樣),你需要在每行字符數據之間重新添加它們。 (Java的字符串連接擺脫空終止的附加字符串之間) 總之,這是你需要怎麼做來獲得相同的結果 – darkpbj

+0

我仍然不明白爲什麼你明確地處理「\ n」時你不知道文件中有什麼。您正在向數組添加noOfLines * new_line_chars,而只需要他在文件中寫入的字符數。只用一行代碼試試你的程序,你就會明白。 – Arham