2012-10-31 37 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