class Data { String name; int age; // и т.д. ..... }
как это записать в файл (и после прочитать) ?
(в смысле что структура файла будет иметь тип Data).
23 ноя 2006 11:29 | |
Сообщения:209
|
Например имеется сlass :
class Data { String name; int age; // и т.д. ..... } как это записать в файл (и после прочитать) ? (в смысле что структура файла будет иметь тип Data). |
23 ноя 2006 11:48 | |
Сообщения:3874
|
Как вариант, можно использовать DataOutputStream. Нужно написать два метода - который умеют сохранять/читать струткуру в/из потока, и в цикле запускать чтение или запись:
Читаем и записываем в одинаковом порядке public void writeData(DataOutputStrea stream, Data data) throws IOException { stream.writeString(data.name); stream.writeInt(data.age); } public Data readData(DataInputStream stream) throws IOException { Data data = new Data(); data.name = stream.readString(); data.age = stream.readInt(); return data; } DataOutputStream и DataInputStream создаются на основе FileOutputStream и FileInputStream cooтветственно. |
24 ноя 2006 20:19 | |
Сообщения:209
|
Лучше даже не DataOutputStream и DataInputStream , а сразу
ObjectOutputStream и ObjectInputStream.. |
25 ноя 2006 19:34 | |
Сообщения:209
|
Ну вот так например , как вариант ..
class WriterReader { FileOutputStream fout; ObjectOutputStream oout; public void writeObject(Data[] data) throws FileNotFoundException, IOException { fout = new FileOutputStream("c:\\file.dat"); oout = new ObjectOutputStream(fout); for(int i = 0; i < data.length; i++) oout.writeObject(data[i]); oout.close(); } //.... } А есть ли разница какой поток закрывать oout или fout ? |
24 дек 2006 16:33 | |
Сообщения:3874
|
Andrew:
А есть ли разница какой поток закрывать oout или fout ?
Нет, все стандартные Java потоки закрываются каскадно (т.е. если закрыть child поток - child закроет parent поток). |
25 дек 2006 07:11 | |
Сообщения:994
|
а я делаю через
BufferedReader in = new BufferedReader(new FileReader(path)); и соотв
Quote:
BufferedWriter out = new BufferedWriter(new FileWriter(path1));
есть разница по быстродействию с примерами которые привели вы? Скачать фото и видео из Инстаграм https://igrab.online/ |
25 дек 2006 08:27 | |
Сообщения:209
|
Да буферизированный ввод/вывод улучшает эффективность. НО
тут cобственно обсуждалась запись объектов в файл ObjectOutputStream/.. и альтернатива в виде DataOutputStream/...а эти патоки буферизировать не получится. Ну а FileWriter/... уж совсем не подходит для записи структуры типа Data , ещё String name; int age; кое как запишите , но а что будете делать с double, c массивами, с др. структурами ??? Помойму ObjectOutputStream/... лучше не найти для данной задачи (название потока говорит само за себя). |
25 дек 2006 08:41 | |
Сообщения:994
|
прошу прощения, не внимателььно прочел, думал речь идет о Стринге
Скачать фото и видео из Инстаграм https://igrab.online/ |
27 дек 2006 16:57 | |
Сообщения:15
|
Кстати о string, подскажите как прочитать файл. Пробую так
FileInputStream fis = new FileInputStream("путь_к_файлу");но выводит набор чисел (по-ходу не та кодировка?), добавляю InputStreamReader isr = new InputStreamReader(fis, "KOI8_R");но эффекта не много, тока числа меняются. |
28 дек 2006 07:07 | |
Сообщения:994
|
я об этом только что писал
BufferedWriter out = new BufferedWriter(new FileWriter(path)); path - путь до файла. создается автоматом, в противном случае заменяется. и посмотри методы BufferedWriter там есть write() и newLine() out.write(txt); out.newLine(); вроде достаточно что бы записать Скачать фото и видео из Инстаграм https://igrab.online/ |
28 дек 2006 13:22 | |
Сообщения:209
|
Cуществуют различные классы для чтения/записи из/в файл(а).
В файле записано скажем : Hello world ! ....... FileInputStream fin = new FileInputStream("..."); while(fin.available() > 0) { System.out.print((char)fin.read()); } fin.close(); ....... } |
28 дек 2006 14:57 | |
Сообщения:15
|
Достаточно было сказать что в любом случае понадобится преобразование типа :
(char) А на счёт книжки так я как раз и читаю, вот и появился вопрос почему не работает вообщем-то их листинг http://pages.plotinka.ru/~files21/books/programmistdocs/19/Glava18/Index2.htm Но теперь вообщем-то понятно просто забыли написать (char). |