У меня работает следующее.Отредактировано после комментария.
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();
к char
, иначе вы получите неправильный вывод, вам придется сбросить count
, иначе count<4
не будетбыть верным всегда после первого запуска (а поскольку вы не выполните fileReader.read()
, вы попадете в бесконечный цикл), и вам придется проверять готовность при каждом чтении (или вы можете заблокировать)
РЕДАКТИРОВАТЬ: Очевидно, это пример.Вы никогда не должны делать прямое str += something
в цикле, а использовать StringBuffer
, и ловить и обрабатывать возможное исключение.
Примечание по второму редактированию: если это интенсивная процедура, это делаетэто неправильно.Я посмотрю, смогу ли я сделать это правильно (без возврата)
ДАЙТЕ ДРУГОЕ РЕДАКТИРОВАНИЕ:
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
}
}
}
Повторный вызов метода, который делает что-то, все еще не симпатичен, но этонамного ближе.