Читайте также:
|
|
В данной программе запись в файл реализована следующим образом:
(количество объектов)(размер следующего объекта)(сам объект)(размер следующего объекта)(сам объект)
Графическая илюстрация:
Блок схема
Код программы
import java.io.*;
public class stroka {
String name;
int popul;
int gubCount;
String gubNames[];
int gubPop[];
//ввод исходных данных
public void vvod() {
try {
StringBuffer str;
char ch;
System. out. println("Введите название страны");
str = new StringBuffer();
while ((ch = (char) System. in. read())!= 13)
str.append(ch);
ch = (char) System. in. read();
name = new String(str.toString());
System. out. println("Введите количество жителей в данной стране");
str = new StringBuffer();
while ((ch = (char) System. in. read())!= 13)
str.append(ch);
ch = (char) System. in. read();
popul = Integer. parseInt (str.toString());
System. out. println("Введите количество губерний в данной стране");
str = new StringBuffer();
while ((ch = (char) System. in. read())!= 13)
str.append(ch);
ch = (char) System. in. read();
int t = Integer. parseInt (str.toString());
gubCount = t;
gubPop = new int [t];
gubNames = new String[t];
for (int i = 0; i < t; i++) {
System. out. println("Введите название губернии");
str = new StringBuffer();
while ((ch = (char) System. in. read())!= 13)
str.append(ch);
ch = (char) System. in. read();
gubNames[i] = new String(str.toString());
System. out
.println("Введите количество жителей в данной губернии");
str = new StringBuffer();
while ((ch = (char) System. in. read())!= 13)
str.append(ch);
ch = (char) System. in. read();
gubPop[i] = Integer. parseInt (str.toString());
}
} catch (IOException e) {
System. out. println(e.toString());
}
}
//вывод исходных данных на экран
public void vivod() {
int t = gubCount;
System. out. println(name + " " + popul + " " + t + ":");
for (int i = 0; i < t; i++)
System. out. println(" " + gubNames[i] + " " + gubPop[i]);
}
//проверка: соответствует ли количество жителей в губерниях и количество жителей в //стране
public int check() {
int s = 0;
for (int i = 0; i < gubCount; i++) {
s += gubPop[i];
}
if (s == popul)
return 1;
Else
return 0;
}
public String getName() {
return name;
}
//запись информации в файл
public void writeToFile(DataOutputStream out) {
try {
out.writeInt(this. getInFileSize());
out.writeUTF(name);
out.writeInt(popul);
out.writeInt(gubCount);
for (int i = 0; i < gubCount; i++) {
out.writeUTF(gubNames[i]);
out.writeInt(gubPop[i]);
}
} catch (IOException e) {
System. out. println(e.toString());
}
}
//чтение информаци из файла
public void readFromFile(RandomAccessFile inp, int startPosition){
try {
inp.seek(startPosition);
name = inp.readUTF();
name = name.trim();
popul = inp.readInt();
gubCount = inp.readInt();
gubNames = new String[gubCount];
gubPop = new int [gubCount];
for (int i=0; i<gubCount; i++){
gubNames[i] = inp.readUTF();
gubPop[i] = inp.readInt();
}
} catch (IOException e){
System. out. println(e.toString());
}
}
//функция реализует подсчет размера обхекта при записи его в файл
public int getInFileSize(){
int res;
res = name.length()+4+4+2;
for (int i=0; i<gubCount; i++)
res+= gubNames[i].length()+2+4;
return res;
}
}
import java.io.*;
public class z7 {
public static void main(String[] args) {
try {
//инициализация ппотоков для вывода
OutputStream f = null;
StringBuffer str;
char ch;
try {
f = new FileOutputStream("test.j");
} catch (FileNotFoundException e) {
System. out. println("Файл не найден");
return;
}
BufferedOutputStream b = new BufferedOutputStream(f);
DataOutputStream out = new DataOutputStream(b);
//ввод количества строк в таблице
int n;
str= new StringBuffer();
System. out. println("Введите кол-во строк в таблице");
while ((ch = (char) System. in. read())!= '\n')
if (ch!= 13)
str.append(ch);
n = Integer. parseInt (str.toString());
out.writeInt(n);
//ввод объектов с клавиатуры и зпись их в файл
for (int i = 0; i < n; i++) {
stroka s = new stroka();
s.vvod();
s.writeToFile(out);
}
out.close();
// InputStream f1 = new FileInputStream("test.j");
// BufferedInputStream bi = new BufferedInputStream(f1);
// DataInputStream inp = new DataInputStream(bi);
//инициализация файла проихвольного доступа
File f1 = new File("test.j");
RandomAccessFile inp = new RandomAccessFile(f1, "r");
stroka s1 = new stroka();
//считывание номера необходимой записи
System. out. println("\nВведите номер записи которую хотите прочитать");
str = new StringBuffer();
while ((ch = (char) System. in. read())!= '\n')
if (ch!= 13)
str.append(ch);
n = Integer. parseInt (str.toString());
int k = inp.readInt();
if (n > k) {
System. out. println("В файле нет такой записи");
return;
}
//подсчет положения необходимой записи в файле
int pos = 4, t;
for (int i = 0; i < n - 1; i++) {
t = inp.readInt();
pos += t+4;
inp.seek(pos);
}
pos+=4;
//считывание необходимой записи и вывод ее на экран
s1.readFromFile(inp, pos);
System. out. println("Считанная запись:\n");
s1.vivod();
inp.close();
} catch (IOException e) {
System. out. println(e.toString());
}
}
}
Дата добавления: 2015-10-29; просмотров: 48 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Код программы | | | Результаты работы программы |