#java #fileinputstream #fileoutputstream
#java #fileinputstream #fileoutputstream
Вопрос:
Как правильно печатать .dat на консоли Java?
public void open(){
try {
FileInputStream inFile =
new FileInputStream("C:" File.separatorChar "transactions.dat");
ObjectInputStream in = new ObjectInputStream(inFile);
//While (in.readLine!=null){
System.out.print(in.readLine());}
in.close();
} catch (FileNotFoundException ex) {
System.out.println(ex);
} catch (Exception ex) {
ex.printStackTrace();
} finally{ }
}
В результате получается только одна строка, а символы имеют разный размер
Как прочитать все данные и распечатать на консоли с удобочитаемым выводом!
при первоначальной записи в этот файл dat я использую
FileOutputStream outFile =
new FileOutputStream("C:" File.separatorChar "transactions.dat");
ObjectOutputStream out = new ObjectOutputStream(outFile);
out.writeChars(brokerageAcc1.toString());
Ответ №1:
Если это текст, который вы записываете и читаете, тогда вы должны использовать классы Writer и Reader, обернутые BufferedWriter и BufferedReader для обеспечения обработки строк.
FileOutputStream outFile =
new FileOutputStream("C:" File.separatorChar "transactions.dat");
BufferedWriter writer = new BufferedWriter(new Writer(outFile));
writer.write(Acc1.toString());
// maybe write a newline??
writer.newLine();
Затем, чтобы прочитать его обратно, вы используете буферизованный считыватель:
FileInputStream inFile =
new FileInputStream("C:" File.separatorChar "transactions.dat");
BufferedReader reader = new BufferedReader(new InputStreamReader(inFile));
while (true) {
String line = reader.readline();
if (line == null) break;
System.out.println(line);
}
Ответ №2:
FileInputStream fis = new FileInputStream("C:" File.separatorChar "transactions.dat");
BufferedReader br=new BufferedReader(new InputStreamReader(fis));
String s;
while ((s=br.readline())!=null)
System.out.println(s);
Комментарии:
1. Подробнее о Reader и Writer читайте в java.io это помогает вам справляться с вводом и выводом строк
Ответ №3:
Если на вашей консоли символы имеют разный размер, то сама консоль настроена на отображение текста пропорциональным шрифтом. Это должно быть настроено на консоли и не может управляться из вашего java-приложения.
Вы пишете в ObjectOutputStream
. Это несколько странно, но у вас могут быть требования к этому. Для чтения из такого файла используйте следующий код (Примечание: я немного изменил ваш алгоритм записи! Закрытие потока и обработка исключений НЕ включены)
// writing
FileOutputStream outFile = new FileOutputStream("C:" File.separatorChar "transactions.dat");
ObjectOutputStream out = new ObjectOutputStream(outFile);
String s = brokerageAcc1.toString();
out.writeInt(s.length());
System.out.println(s.length());
out.writeChars(s);
// reading
FileInputStream inFile = new FileInputStream("C:" File.separatorChar "transactions.dat");
ObjectInputStream in = new ObjectInputStream(inFile);
int length = in.readInt(); // get the number of chars
System.out.println("" length);
StringBuilder result = new StringBuilder();
for (int i = 0; i < length; i )
result.append(in.readChar());
System.out.println(result.toString());
Комментарии:
1. result.append(в.readChar()); эта строка выдает исключение java.io.EOFException в java.io.DataInputStream.readChar(неизвестный источник) в java.io.ObjectInputStream$BlockDataInputStream.readChar(неизвестный источник) в java.io.ObjectInputStream.readChar(неизвестный источник)
2. @Jenifer — вы изменили часть «запись»? Я добавил еще две строки «debug», пожалуйста, проверьте, что обе строки выводят одно и то же значение. EOF не должно происходить.
3. @Jenifer — внес еще одно изменение — есть вероятность, что brokerageAcc1.toString() изменяется между чтением длины и строки. Сохранил его в переменную.