在Java中将文本文件读入字符数组

在Java中将文本文件读入字符数组,java,arrays,file-io,char,bufferedreader,Java,Arrays,File Io,Char,Bufferedreader,我正在读取一个文本文件,并试图将其逐字符存储到数组中。我的方法(如下)预先定义了一个初始长度为100000的char数组(我这里的主要问题)。因此,如果文件包含的字符数小于该数量(如果字符数大于该数量,也会出现问题),则数组中存在空值。我想避免这种情况。有没有办法预先确定文本文件中的字符数?还是有更好的方法一个字符一个字符地存储文件 char buf[] = new char[100000]; FileReader fr = new FileReader(filename); BufferedR

我正在读取一个文本文件,并试图将其逐字符存储到数组中。我的方法(如下)预先定义了一个初始长度为100000的
char
数组(我这里的主要问题)。因此,如果文件包含的字符数小于该数量(如果字符数大于该数量,也会出现问题),则数组中存在空值。我想避免这种情况。有没有办法预先确定文本文件中的字符数?还是有更好的方法一个字符一个字符地存储文件

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
}
charbuf[]=新字符[100000];
FileReader fr=新的FileReader(文件名);
BufferedReader br=新的BufferedReader(fr);
br.read(buf);
对于(int i=0;i
使用字符数组列表接受值。之后,将ArrayList转换为数组,如下所示

 char[] resultArray = list.toArray(new char[list.size()]);
您应该使用br.readLine()而不是br.read(),如下所示:

String str;
while((str = br.readLine())!=null){
        str.tocharArray();
}
改用扫描仪

我会使用扫描仪,逐行读取,而不是逐字符读取,然后将其存储为字符串。如果你真的想要一个字符数组,那么以后再把它取出来就容易多了

这在功能上做了相同的事情:

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()方法已经内置,可以返回一个数组,该数组会根据需要自动调整大小。

然后不要使用br.read(),使用br.readLine获取字符串,然后按字符串提取字符。toCharArray()*str.toCharArray();您正在添加一个额外的字符“\n”。也许你应该删除它。逐字符读取将为每一行返回一个换行符。Scanner假定您只需要行的内容,并返回以null结尾的字符串。结果是,如果您想要一个巨大的字符串(初始长度为100000),则需要在每行字符数据之间重新添加这些字符串。(Java字符串连接消除了附加字符串之间的空终止)简而言之,这就是获得相同结果所需的方法。我仍然不明白,当您不知道文件中有什么内容时,为什么要显式处理“\n”。您正在向数组中添加noOfLines*new_line_字符,而您只需要在文件中写入的字符数。用一行代码试试你的程序,你会明白的。而且在内存方面,你的代码效率很低,因为它每次都会创建一个新字符串。您应该使用StringBuilder和append()。因为br.read最初会这样做。你不能忽略换行符。这次行动不清楚他的意图,老实说这很重要。举个例子,他说他正在使用一个HTTPClient来读取HTML数据。Readline可以一行一行地读取这些字符,但如果要在单个字符串中处理整个HTML文档,则需要重新插入这些字符。你的回答是不正确的,根据假设OP使用的原始帖子(尽管这似乎是他想要的)