Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Класс RandomAccessFile



Этот класс реализует сразу два интерфейса – DataInput и DataOutput – следовательно, может производить запись и чтение всех примитивных типов Java. Эти операции, как следует из названия, производятся с файлом. При этом их можно производить поочередно, произвольным образом перемещаясь по файлу с помощью вызова метода seek(long) (переводит на указанную позицию в файле). Узнать текущее положение указателя в файле можно вызовом метода getFilePointer.

При создании объекта этого класса конструктору в качестве параметров нужно передать два параметра: файл и режим работы. Файл, с которым будет проводиться работа, указывается либо с помощью String – название файла, либо объектом File, ему соответствующим. Режим работы (mode) – представляет собой строку либо «r» (только чтение), либо «rw» (чтение и запись). Попытка открыть несуществующий файл только на чтение приведет к исключению FileNotFoundException. При открытии на чтение и запись он будет незамедлительно создан (или же будет брошено исключение FileNotFoundException, если это невозможно осуществить).

После создания объекта RandomAccessFile можно воспользоваться методами интерфейсов DataInput и DataOutput для проведения с файлом операций считывания и записи. По окончании работы с файлом его следует закрыть, вызвав метод close.

В следующем примере создается объект типа String, инициализируется текстовой строкой, определяется количество гласных, пробелов и общее количество букв. Реализован также механизм записи информации в файл и ее считывания из файла.

Пример 2.6

import java.io.*;

public class Lab1

{

private String data;

private String filename;

private String choice;

private RandomAccessFile fio;

private BufferedReader in=

new BufferedReader(new InputStreamReader(System.in));

public void runConsol(){

while(true){

try{

System.out.println("\nEnter your choice:");

System.out.println("1.Read text from file");

System.out.println("2.Type text");

System.out.println("3.Exit");

//чтение выбора пользователя

choice=in.readLine();

if (choice.compareTo("1")==0){

System.out.println("Type your filename");

filename=in.readLine();

fio = new RandomAccessFile(new File(filename), "r");

data=fio.readLine();

fio.close();

System.out.println("\nFile Input:\n"+data);

int spaces=0, glas=0, lett=0;

char ch;

for(int i=0;i<data.length();i++)

{

ch=Character.toLowerCase(data.charAt(i));

if(Character.isWhitespace(ch))

spaces++; if((ch=='a')||(ch=='e')||(ch=='i')||(ch=='o')||(ch=='u')||(ch=='y'))

glas++;

lett++;

}

System.out.println("\nspaces - "+spaces+"\nvowels - "+glas+"\nletters - "+(lett-spaces));

}

else if (choice.compareTo("2")==0){

System.out.println("Type your text");

data=in.readLine();

System.out.println("Type your filename");

filename=in.readLine();

fio = new RandomAccessFile(new File(filename), "rw");

fio.writeBytes(data);

fio.close();

System.out.println("Your text was saved");

}

else if (choice.compareTo("3")==0){

return;

}

}

catch(FileNotFoundException e){

System.out.println("File not found");

}

catch(IOException e){

System.out.println("Error1");

}

catch(Exception e){

System.out.println("Error2");

}

}

}

}

Результат выполнения программы:

Enter your choice:

1.Read text from file

2.Type test

3.Exit

Выбрав 2-й вариант, введем строку и имя файла, где необходимо сохранить строку. После этого будет предложено снова осуществить выбор.

Теперь выберем 1-й вариант. Введем имя нашего файла. В результате выведется исходная строка и итоги ее анализа: количество пробелов, гласных и общее количество букв. И снова будет предложен выбор.

Теперь выберем 3-й вариант. После этого программа завершит свою работу.

24. Предопределённые потоки

Все программы Java автоматически импортируют пакет java.lang. Этот пакет определяет класс с именем System, который инкапсулирует некоторые аспекты исполнительной среды Java. Класс System содержит 3 предопределённые поточные переменные: in, out, err, объявленные со спецификатором public и static. Public означает, что они могут использоваться любой другой частью программы; static означает, что они могут использоваться без ссылки на конкретный объект.

Объект System.out называется потоком стандартного вывода. С ним связана консоль. Объект System.in называется потоком стандартного ввода. С ним связана клавиатура. Объект System.err называется стандартным потоком ошибок, который связан с консолью. Эти потоки могут быть переназначены на любое совместимое устройство ввода-вывода.

System.in – это объект типа InputStream; System.out, System.err – объекты типа PrintStream. Все они – байтовые потоки, хотя они обычно используются, чтобы читать и записывать символы с консоли и на консоль. Однако их можно упаковывать в символьные потоки.Предпочтительный способ для чтения консольного ввода в Java2 заключается в использовании символьного потока. Консольной ввод выполняется с помощью считывания из объекта System.in. Чтобы получить символьный поток, который присоединен к консоли, нужно перенести (упаковать) System.in в объект типа BufferedReader (буферизированный входной поток). Обычно используется следующий его конструктор:

BufferedReader (Reader inputReader);

inputReader – поток, который связан с создающимся экземпляром класса BufferedReader;

Reader – это абстрактный класс. Один из его конкретных подклассов - InputStreamReader, который преобразовывает байты в символы.

Чтобы получить объект InputStreamReader, который связан с System.in, используется следующий конструктор: InputStreamReader (InputStream inputStream);

Так как System.in ссылается на объект типа InputStream, его можно использовать в качестве параметра inputStream.

26. Строковый литерал. Состоит из “0” или большего количества символов, которые заключены в “ ”. Каждый символ может быть представлен в UNICODЕ-последовательности. Строковый литерал имеет тип String и всегда ссылается на экземпляр класса String.

Пример: “Я самый лучший”





Дата публикования: 2015-02-03; Прочитано: 459 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...