私はJavaの初心者で、〜25 MBのファイルを読み込んでいます.ロードするのに永遠に時間がかかります...これを高速化するための代替手段はありますか? 大きなファイルを処理できないのはスキャナーですか?
String text = "";
Scanner sc = new Scanner(new File("text.txt"));
while(sc.hasNext()) {
text += sc.next();
}
反復ごとにテキストに連結しており、文字列は Java では不変です。つまり、「変更」さString
れるたびにメモリ内に新しいオブジェクトが作成されるため、大きなファイルの読み込み時間が長くなります。aを継続的に変更する場合は、常にa を試して使用するtext
必要があります。StringBuilder
String
あなたがすることができます:
StringBuilder text = new StringBuilder();
Scanner sc = new Scanner(new File("text.txt");
while(sc.hasNext()) {
text.append(sc.next());
}
テキストの内容にアクセスしたい場合は、 を呼び出すことができますtext.toString()
。
それは、String +=
常に成長し続ける新しい String オブジェクトを作成する です。実際、25 MB 未満の場合は次のことができます (undermore):
StringBuilder sb = new StringBuilder();
BufferReader in = new BufferedReader(new InputStreamReader(
new FileInputStream(new File("text.txt"), "UTF-8")));
for (;;) {
String line = in.readLine();
if (line == null)
break;
sb.append(line).append("\n");
}
in.close();
String text = sb.toString();
readLine
改行文字を含まず、改行文字までの行を生成します。
Java 7 では、次のことができます。
Path path = Paths.get("text.txt");
String text = new String(Files.readAllBytes(path), "UTF-8");
エンコーディングは UTF-8 として明示的に指定されます。「Windows-1252」は、Windows Latin-1 などの場合です。
を使用してみてください。BufferedStreams
たとえば、BufferedInputStream, BufferedReader
加速します。詳細についてBufferedStreams
は、こちらをご覧ください。
http://docs.oracle.com/javase/tutorial/essential/io/buffers.html
s は で不変であるため、String
使用する代わりに、ループの各反復内で新しいを作成しますStringBuilder
String
Java
String
while