以下は私にとってはうまくいきます。コメント後に編集しました。
import java.io.*;
public class Test {
public static void main(String[] args) {
String str = "";
int count = 0;
try {
Reader fileReader = new BufferedReader(new FileReader("testfile"));
fileReader.mark(5);
while(fileReader.ready()){
count = 0;
str ="";
fileReader.reset();
while (count < 4 && fileReader.ready()){
if (count == 1){
fileReader.mark(5);
}
str += (char)fileReader.read() ;
count++;
}
System.out.println(str); // send str to another function and do something with it;
}
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
}
fileReader.read();
aにキャストする必要があることに注意してください。そうしないとchar
間違った出力が得られます。リセットする必要があります。count
そうcount<4
しないと、最初の実行後は true になりません (そうしないためfileReader.read()
、無限ループに陥ります)。 、読み取りごとに準備ができているかどうかをテストする必要があります(またはブロックする可能性があります)
編集:明らかに、これは例です。str += something
ループ内でストレートを行うべきではありませんが、を使用してStringBuffer
、発生する可能性のある例外をキャッチして処理してください。
2 番目の編集に関する注意: これが集中的な手順である場合、これは間違っています。私はそれを正しく行うことができるかどうかを確認します (後戻りせずに)
まだ別の編集:
import java.io.*;
public class Test {
public static void main(String[] args) {
StringBuffer buffer = new StringBuffer();
int length = 4;
try {
Reader fileReader = new BufferedReader(new FileReader("teststring"));
for (int i = 0; i < length && fileReader.ready(); i++) {
buffer.append((char) fileReader.read());
}
while (fileReader.ready()) {
System.out.println(buffer); // send str to another function and do
// something with it;
buffer.deleteCharAt(0);
buffer.append((char) fileReader.read());
}
System.out.println(buffer); // send str to another function and do
// something with it;
}
catch (IOException e) {
// TODO Auto-generated catch block
}
}
}
何かを実行するメソッドへの繰り返し呼び出しはまだきれいではありませんが、これははるかに近いものです。