Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Этот класс реализует сразу два интерфейса – 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!