Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Об'єктно орієнтовне програмування1.doc
Скачиваний:
5
Добавлен:
17.11.2019
Размер:
1.38 Mб
Скачать

10. Система вводу/виводу в java

1. Клас File.

2. Типи вхідних і вихідних потоків.

3. Класи для читання і запису даних.

4. Стандартний ввід/вивід.

Завдання для самостійного опрацювання теми

1. Відкрити текстовий файл, який можна прочитати по рядках. Зчитати з нього по одному рядку String і помістити отриману інформацію в список LinkedList. Надрукувати всі рядки у зворотньому порядку, використовуючи можливості класу LinkedList.

2. Модифікувати завдання 1 так, щоб ім'я файла з оброблюваним текстом передавалося в командному рядку.

3. Модифікувати завдання 2 так, щоб усі зчитані рядки перетворились у верхній регістр букв, і надрукувати результати (стандартний вивід System out).

4. Модифікувати завдання 2 так, щоб програма також обробляла додаткові аргументи командного рядка як слова для пошуку у файлі.

Надрукувати рядки, де було знайдено вказані слова.

5. Створити клас з ім'ям SortedDirList, конструктор якого приймає інформацію про шлях файла та на основі цієї інформації складає відсортований список файлів у вказаній директорії. Створити два перевантажених методи list(), один з яких має повертати весь список файлів, а другий — підмножину списку залежно від переданого йому параметра. Додати до класу метод size(), який набуває, як параметр, ім'я файла і повертає розмір цього файла.

6. Змінити програму DirList.java так, щоб фільтр імен файлів FilenameFilter сам відкривав файли і визначав їхню придатність до списку файлів. Основою для цього є їхній внутрішній зміст і допоміжні аргументи командного рядка:

Програма DirList.Java

import Java. io. *;

import Java. util. *;

import com.bruceeckel.util. *;

public class DirList {

public static void main(String[] args) {

File path = new File(«.»);

String [] list;

if (args. length —=0)

list = path.list();

else

list = path.list(new

DirFilter(args [0]));

Arrays, sort (list, new

AlphabeticComparator());

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

System.out.println (list[i]);

}}

class DirFilter implements FilenameFilter {

String afn;

DirFilter (String afn) {this.afn = afn;}

public boolean accept(File dir, String name) {

String f= new File (name). getName();

return findexOf(afn) != -1;

}

}///:~

  1. Для програми WordCount.java i

іmport java. io. *

import Java. Util. *;

class Counter {

private int i=l;

int read() {return i;}

void increment() {i+ +;}

}

public class WordCount {

private FileReaderfile;

private StreamTokenizer st;

//Таблиця ТгееМар зберігає ключі відсортованими

private ТгееМар counts = new TreeMap();

WordCount (String filename)

throws FileNotFoundExaption {

try{

file = new FileReader (fileпате);

st = new StreamTokenizer (new Bufered Reader(file));

st.ordinaryChar('.');

st. ordinary Char ('-');

cath(FileNotFoundExcepion e) {

System.err.println (

«Неможливо відкрити файл» + filename);

throw e;

}

}

void cleanup() {

try{

file.close();

} catch (IOException e) {

System. err.println(

«Неможливо виконати file.close()»);

}

}

void count Words() {

try{

while(st.nextToken() != StreamTokenizer.TT_EOF)

{ String s;

switch (st. ttype) {

case StreamTokenizer. ТT_EOL;

s = new String("EOL ");

break;

case

StreamTokenizer. TT_NUMBER;

s = Double. toString(st.nval);

break;

case

StreamTokenizer. TT_WORD;

s = st.sval;

break;

default: //в ttype знаходить один символ

s = String.valueOf((char)st.ttype);

}

if (counts. containsKey(s))

((Counter)counts.get(s).increment();

else

counts.put(s. new Counter());

}

} catch (IOException e) {

System. err.println(

«Помилка при виклику методу» st.next Token();

}

}

Collection values () {

return counts.values ();

}

Set keySet () {return coun.keySet ();}

Counter getCounter (String s) {

return (Counter)counts.get(s);

}

public static void main(String[] args)

throws FileNotFoundException {

WordCount wc = new

WordCount(args[O]) ;

wc. countwords();

Iterator keys = wc.keySet().iterator();

while (keys.hasNext()) {

String key = (String)keys. next();

System.out.println(key + «:»

+ wc. getCounter (key). read());

} wc.cleanup();

}

}///:~

7.1. Змінити програму так, щоб вона сортувала слова за алфавітом.

7.2 Змінити програму так, щоб вона використовувала клас із рядком String і лічильником для кожного окремого слова, а також множину Set для зберігання списку слів.