#java #file #split
#java #файл #разделить
Вопрос:
Я должен отобразить все записи в своих блоках (текстовые файлы) и выполнить разделение, чтобы «покрыть» разделители полей, но воспроизводится только первая запись моих блоков. Что я делаю не так?
enter code here
public static void listAllStudents() throws IOException {
File path = new File(Descriptor.getBlockPath());
for (int i = 0; i < path.listFiles().length; i ) {
try {
FileInputStream file = new FileInputStream(Descriptor.getBlockPath() "BLK" i ".txt");
InputStreamReader entrada = new InputStreamReader(file);
BufferedReader buf= new BufferedReader(entrada);
String piece = " ";
System.out.println("nBLOCO " i " ------------------------------------------------------ ");
do {
if (buf.ready()) {
piece = buf.readLine();
System.out.println("n¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨");
String string = " ", field[] = piece.split(Descriptor.getFieldSeparator());
string = " ";
System.out.println("CPF: " field[0]);
System.out.println("Name: " field[1]);
System.out.println("Course: " field[2]);
System.out.println("Age: " field[3]);
System.out.println("Phone: " field[4]);
System.out.println("Active: " field[5]);
string = " ";
}
} while (buf.ready());
buf.close();
} catch (IOException e) {
System.out.println();
}
}
}
Комментарии:
1. Классическое неправильное использование
ready()
. В любое время и в любом месте это не является допустимым тестом для конца потока.
Ответ №1:
Смотрите Документацию для метода BufferedReader.readLine():
или null, если достигнут конец потока
Затем измените свой код, чтобы читать файл построчно:
while ((piece = buf.readLine()) != null) {
String field[] = piece.split(Descriptor.getFieldSeparator());
if (field.length >= 6) {
System.out.println("CPF: " field[0]);
System.out.println("Name: " field[1]);
System.out.println("Course: " field[2]);
System.out.println("Age: " field[3]);
System.out.println("Phone: " field[4]);
System.out.println("Active: " field[5]);
}
}
Комментарии:
1. Нет, прочитал docs.oracle.com/javase/7/docs/api/java/io /…
2. Ваша ссылка просто сообщает, что
#ready
это зависит от реализации reader, и к ней возвращается код OPsFileInputStream#available()
, и это говорит о том, осталось ли что-то для чтения.3. Он говорит, что возвращает true, если гарантируется, что следующее чтение () не будет заблокировано для ввода, — это все, что он обещает
4. Да, вы правы, давайте ограничим наше исследование JavaDoc, который, очевидно, не может обещать многого, поскольку это зависит от используемой
Reader
реализации. Мы не должны смотреть в reader (и вложенный входной поток), который на самом деле использует OP.5. @Tom «Что-то доступное для чтения без блокировки» — это не то же самое, что «что-то осталось для чтения».
ready()
Ниavailable()
один из них не является допустимым тестом для конца потока, и Javadoc специально говорит об этом.