Было бы трудно избежать использования ArrayList или чего-то подобного. Если вы знаете, что файл ASCII, вы можете сделать
int partSize = 500;
File f = new File("file.txt");
String[] parts = new String[(f.length() + partSize - 1) / partSize];
Но если файл использует кодировку переменной ширины, такую как UTF-8, это не сработает. Этот код сделает работу.
static String[] readFileInParts(String fname) throws IOException {
int partSize = 500;
FileReader fr = new FileReader(fname);
List<String> parts = new ArrayList<String>();
char[] buf = new char[partSize];
int pos = 0;
for (;;) {
int nRead = fr.read(buf, pos, partSize - pos);
if (nRead == -1) {
if (pos > 0)
parts.add(new String(buf, 0, pos));
break;
}
pos += nRead;
if (pos == partSize) {
parts.add(new String(buf));
pos = 0;
}
}
return parts.toArray(new String[parts.size()]);
}
Обратите внимание, что FileReader
использует кодировку платформы по умолчанию. Чтобы указать конкретную кодировку, замените ее на new InputStreamReader(new FileInputStream(fname), charSet)
. Это немного уродливо, но это лучший способ сделать это.