Я новичок в java, но все еще работаю над множеством вещей. У меня проблема с создаваемым мной пакетом для чтения / записи. У меня есть запись (как текстовые, так и файлы произвольного доступа), но моя проблема возникает из-за использования bufferedReader для сбора ввода моего текстового файла, останавливаясь на ",", а затем взяв эту информацию и проанализировав ее до соответствующих форматов данных перед ее отправкой. прочь на метод записи, который у меня есть.
У меня такой формат: файл text.txt = имя, возраст, зарплата. В этом случае подойдет любое число, но в файле это строка, разделенная запятыми, например: «Джеймс, 22, 1500.20»
Мой метод - беспорядок, вот где я действительно застрял
package l2Reader;
import java.io.*;
import l2Record.Record;
public class Text extends Reader {
private BufferedReader in;
/**
* Opens a file of employee records for reading
* @param fileName -- name of file to open
* @throws IOException -- if fileName is null or
* unable to open the file for any reason.
*/
public void open(String fileName) throws IOException{
in = new BufferedReader(new FileReader(fileName));
}
/**
* Reads the next employee data Record.
* @return the Record read.
* @throws IOException if an underlying read command throws an exception or
* the data in the file is not able to be interpreted as a valid employee record.
*/
public Record read() throws IOException {
try {
String temp = "";
while((temp = in.readLine()) != null)
if (temp.trim().length() > 0){
temp =temp + in.readLine();
}
System.out.println(temp);
String name = "nub";
byte age = 0;
float salary = 10;
if (name == null){
throw new IOException();
}
//return a record
return new Record(name, age, salary);
} catch (IOException e) {
throw e;
} catch (Exception e) {
//throw new IOException();
e.printStackTrace();
throw new IOException();
}
}
/**
* @return true if there is no more data to be read, false otherwise.
*/
public boolean eof(){
boolean eof = true;
try{
return ! (in.read() != -1);
}
catch (Exception e) {
return true;
}
}
/**
* Closes the file
* @throws IOException -- if unable to close the file
*/
public void close() throws IOException{
try{
in.close();
}catch (Exception e) {
throw new IOException();
}
}
}
** отредактировано, чтобы показать весь класс
public Record read() throws IOException {
String line = in.readLine();
if (line == null) {
throw new IOException(); //maybe return null?
}
String[] values = line.split(",");
String name = values[0];
int age = Integer.parseInt(values[1]);
float salary = Float.parseFloat(values[2]);
return new Record(name, age, salary);
}
но, возможно, проблема не в этом. Я не вижу, где вы инициализировали свой bufferedReader. Может быть, опишите процесс, чтобы помочь нам.
Я создал текстовый файл, используя метод записи (создал файл printWriter .txt, который работает), который мне нужно открыть и вернуть как запись в методе чтения. В настоящее время я предоставил переменные по умолчанию в качестве заполнителей для фактической работы. Прямо сейчас мое чтение не дает мне ничего, кроме нулевых значений, и я не могу с ними работать. Я применил раздел «temp», чтобы попытаться выяснить, что возвращает мой файл, но пока это все равно нулю.
«while» не используется в квадратных скобках, поэтому он касается только условия if. Итак, сейчас вы читаете весь файл и проверяете «если», прежде чем делать что-либо еще. На последней итерации in.readline () больше нет строки для чтения, поэтому она возвращает «null». Вот почему вы всегда получаете null. Наденьте эти скобки, и все. Если вы хотите получить только одну запись из чтения, используйте if вместо while (возможно, вы использовали while для отладки).
Просто такой совет, вам не нужно пытаться поймать, если вы собираетесь снова генерировать исключение. Просто добавьте его в подпись функции, как вы это сделали, и все. Это просто более чисто;)
Спасибо, GabLeg, хотя я не видел этого до тех пор, пока не использовал что-то очень похожее на это, и это сработало.
Удовольствие все мое :)
Я могу заполнить это подробнее.