SlideShare a Scribd company logo
1 of 32
Лекция 6. «I/O»
Как получить случайное число?
Как получить псевдослучайное число?
Random rnd = new Random();
rnd.nextInt(100); – вернет случайное число от 0 до 100
При каждом запуске последовательность будет новой
Random rnd = new Random(1L);
rnd.nextInt(100); – вернет случайное число от 0 до 100
При каждом запуске последовательность будет прежней
Math.random(); – вернет случайное число типа double от 0 до 1
При каждом запуске последовательность будет новой
public class Context {
private Map<Class<?>, Object> context = new HashMap<Class<?>, Object>();
public void add(Class<?> clazz, Object object){
if(!object.getClass().equals(clazz)){
//ERROR
}
if(context.containsKey(clazz)){
//ERROR
}
context.put(clazz, object);
}
public Object get(Class<?> clazz){
return context.get(clazz);
}
}
public interface MyEventListener {
public void handle(EventObject event);
}
public class MyEventListenerImpl implements MyEventListener {
//code
public void handle(EventObject event){
//process event
}
}
public class MyEventSource {
private List<MyEventListener> listeners =
Collections.synchronizedList(new ArrayList<MyEventListener>());
public void addListener(MyEventListener listener){
listeners.add(listener);
}
public void removeListener(MyEventListener listener){
listeners.remove(listener);
}
public void fireEvent(){
EventObject event = new EventObject(this);
for(MyEventListener listner : listeners){
listner.handle(event);
}
}
}
class HelloWorld extends AbstractHandler – из примера jetty
public void handle(...) это callback
public class TimeHelper {
public static long getTimeInMs(){
Date date = new Date();
return date.getTime();
//return System.currentTimeMillis();
}
public static int getPOSIX(){
Date date = new Date();
int millisInSecond = 1000;
return (int)(date.getTime() / millisInSecond);
}
public static String getUserDateFull(Locale locale){
Date date = new Date();
DateFormat dateFormatter =
DateFormat. getDateInstance(DateFormat.FULL, locale);
return dateFormatter.format(date);
}
}
int timeMs = 10000;
TimeService.instance().start();
TimeService.instance().sheduleTask(new TimerTask(){
public void run() {
System.out.append("Timer run!n");
TimeService.instance().stop();
}
}, timeMs);
public abstract class InputStream
public class FilterInputStream extends InputStream
public class SimpleFileReader {
public static void main(String args[]) throws IOException {
FileReader fr = new FileReader("SimpleFileReader.java");
BufferedReader br = new BufferedReader(fr);
String currentLine;
while((currentLine = br.readLine()) != null) {
System.out.println(currentLine);
}
fr.close();
}
}
public class CustomFileReader {
public static void main(String args[]) throws IOException {
FileInputStream fstream = new FileInputStream("textfile.txt");
DataInputStream in = new DataInputStream(fstream);
InputStreamReader isr = new InputStreamReader(in, "UTF-16");
BufferedReader br = new BufferedReader(isr);
String strLine;
while ((strLine = br.readLine()) != null) {
System.out.println (strLine);
}
br.close();
}
}
BufferedReader br = null;
try{
//code
br = new BufferedReader(isr);
//code
} catch (Exception e){
System.err.println("Error: " + e.getMessage());
} finally{
if(br != null){
try {
br.close();
} catch (IOException e) {
System.err.println("Error: " + e.getMessage());
}
}
}
public interface VFS {
boolean isExist(String path);
boolean isDirectory(String path);
String getAbsolutePath(String file);
byte[] getBytes(String file);
String getUFT8Text(String file);
Iterator<String> getIterator(String startDir);
}
public class VFSImpl implements VFS {
private String root;
public VFSImpl(String root){
this.root = root;
}
private class FileIterator implements Iterator<String>{
private Queue<File> files = new LinkedList<File>();
public FileIterator(String path){
files.add(new File(root + path));
}
public boolean hasNext() {
return !files.isEmpty();
}
public String next() {
File file = files.peek();
if(file.isDirectory()){
for(File subFile : file.listFiles()){
files.add(subFile);
}
}
return files.poll().getAbsolutePath();
}
public void remove() {
}
}
Java осень 2012 лекция 6

More Related Content

What's hot

RxSwift 예제로 감잡기
RxSwift 예제로 감잡기RxSwift 예제로 감잡기
RxSwift 예제로 감잡기Yongha Yoo
 
Clang-tidy: путешествие внутрь AST C++
Clang-tidy: путешествие внутрь AST C++Clang-tidy: путешествие внутрь AST C++
Clang-tidy: путешествие внутрь AST C++corehard_by
 
Java весна 2013 лекция 7
Java весна 2013 лекция 7Java весна 2013 лекция 7
Java весна 2013 лекция 7Technopark
 
Most Common JavaScript Mistakes
Most Common JavaScript MistakesMost Common JavaScript Mistakes
Most Common JavaScript MistakesYoann Gotthilf
 
数式を構文解析した話
数式を構文解析した話数式を構文解析した話
数式を構文解析した話y1r96 Ueno
 
C++14 reflections
C++14 reflections C++14 reflections
C++14 reflections corehard_by
 
EJEMPLOS DESARROLLADOS
EJEMPLOS DESARROLLADOSEJEMPLOS DESARROLLADOS
EJEMPLOS DESARROLLADOSDarwin Durand
 
Novatadas en java
Novatadas en javaNovatadas en java
Novatadas en javawmca28
 
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tipsOpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tipsHo Kim
 
Java Thread Cronometro
Java Thread CronometroJava Thread Cronometro
Java Thread Cronometrojubacalo
 
Создание новых объектов
Создание новых объектовСоздание новых объектов
Создание новых объектовConstantin Kichinsky
 
Java лаб13
Java лаб13Java лаб13
Java лаб13Enkhee99
 
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016Loïc Knuchel
 
Bài tập tuần 2
Bài tập tuần 2Bài tập tuần 2
Bài tập tuần 2Cong Nguyen
 
Java script.trend(spec)
Java script.trend(spec)Java script.trend(spec)
Java script.trend(spec)dynamis
 
ECMAscript 2015 aka ES6 : à la découverte du nouveau javascript
ECMAscript 2015 aka ES6 : à la découverte du nouveau javascriptECMAscript 2015 aka ES6 : à la découverte du nouveau javascript
ECMAscript 2015 aka ES6 : à la découverte du nouveau javascriptmatparisot
 
المحاضره 6 & 7 c#
المحاضره  6   & 7 c#المحاضره  6   & 7 c#
المحاضره 6 & 7 c#nermeenelhamy1
 

What's hot (20)

RxSwift 예제로 감잡기
RxSwift 예제로 감잡기RxSwift 예제로 감잡기
RxSwift 예제로 감잡기
 
Clang-tidy: путешествие внутрь AST C++
Clang-tidy: путешествие внутрь AST C++Clang-tidy: путешествие внутрь AST C++
Clang-tidy: путешествие внутрь AST C++
 
Java весна 2013 лекция 7
Java весна 2013 лекция 7Java весна 2013 лекция 7
Java весна 2013 лекция 7
 
Most Common JavaScript Mistakes
Most Common JavaScript MistakesMost Common JavaScript Mistakes
Most Common JavaScript Mistakes
 
数式を構文解析した話
数式を構文解析した話数式を構文解析した話
数式を構文解析した話
 
C++14 reflections
C++14 reflections C++14 reflections
C++14 reflections
 
EJEMPLOS DESARROLLADOS
EJEMPLOS DESARROLLADOSEJEMPLOS DESARROLLADOS
EJEMPLOS DESARROLLADOS
 
Novatadas en java
Novatadas en javaNovatadas en java
Novatadas en java
 
All set1
All set1All set1
All set1
 
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tipsOpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
OpenResty/Lua 70+ Advanced Programming Skills and Optimization tips
 
Java Thread Cronometro
Java Thread CronometroJava Thread Cronometro
Java Thread Cronometro
 
Создание новых объектов
Создание новых объектовСоздание новых объектов
Создание новых объектов
 
Java лаб13
Java лаб13Java лаб13
Java лаб13
 
Simulacion - Algoritmo congruencial cuadratico
Simulacion - Algoritmo congruencial cuadraticoSimulacion - Algoritmo congruencial cuadratico
Simulacion - Algoritmo congruencial cuadratico
 
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
 
Bài tập tuần 2
Bài tập tuần 2Bài tập tuần 2
Bài tập tuần 2
 
Java script.trend(spec)
Java script.trend(spec)Java script.trend(spec)
Java script.trend(spec)
 
Java
Java Java
Java
 
ECMAscript 2015 aka ES6 : à la découverte du nouveau javascript
ECMAscript 2015 aka ES6 : à la découverte du nouveau javascriptECMAscript 2015 aka ES6 : à la découverte du nouveau javascript
ECMAscript 2015 aka ES6 : à la découverte du nouveau javascript
 
المحاضره 6 & 7 c#
المحاضره  6   & 7 c#المحاضره  6   & 7 c#
المحاضره 6 & 7 c#
 

Viewers also liked

Java весна 2013 лекция 8
Java весна 2013 лекция 8Java весна 2013 лекция 8
Java весна 2013 лекция 8Technopark
 
Бизнес и системный анализ весна 2013 лекция 1
Бизнес и системный анализ весна 2013 лекция 1Бизнес и системный анализ весна 2013 лекция 1
Бизнес и системный анализ весна 2013 лекция 1Technopark
 
Java осень 2012 лекция 4
Java осень 2012 лекция 4Java осень 2012 лекция 4
Java осень 2012 лекция 4Technopark
 
C++ осень 2012 лекция 8
C++ осень 2012 лекция 8C++ осень 2012 лекция 8
C++ осень 2012 лекция 8Technopark
 
Java осень 2012 лекция 3
Java осень 2012 лекция 3Java осень 2012 лекция 3
Java осень 2012 лекция 3Technopark
 
Web весна 2012 лекция 7
Web весна 2012 лекция 7Web весна 2012 лекция 7
Web весна 2012 лекция 7Technopark
 

Viewers also liked (6)

Java весна 2013 лекция 8
Java весна 2013 лекция 8Java весна 2013 лекция 8
Java весна 2013 лекция 8
 
Бизнес и системный анализ весна 2013 лекция 1
Бизнес и системный анализ весна 2013 лекция 1Бизнес и системный анализ весна 2013 лекция 1
Бизнес и системный анализ весна 2013 лекция 1
 
Java осень 2012 лекция 4
Java осень 2012 лекция 4Java осень 2012 лекция 4
Java осень 2012 лекция 4
 
C++ осень 2012 лекция 8
C++ осень 2012 лекция 8C++ осень 2012 лекция 8
C++ осень 2012 лекция 8
 
Java осень 2012 лекция 3
Java осень 2012 лекция 3Java осень 2012 лекция 3
Java осень 2012 лекция 3
 
Web весна 2012 лекция 7
Web весна 2012 лекция 7Web весна 2012 лекция 7
Web весна 2012 лекция 7
 

More from Technopark

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelTechnopark
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuTechnopark
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARNTechnopark
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. SparkTechnopark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache MahoutTechnopark
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeperTechnopark
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveTechnopark
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Technopark
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Technopark
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Technopark
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSTechnopark
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы HadoopTechnopark
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceTechnopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...Technopark
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"Technopark
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"Technopark
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"Technopark
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"Technopark
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...Technopark
 

More from Technopark (20)

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeper
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и Hive
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
 

Java осень 2012 лекция 6

  • 2.
  • 3.
  • 4. Как получить случайное число? Как получить псевдослучайное число? Random rnd = new Random(); rnd.nextInt(100); – вернет случайное число от 0 до 100 При каждом запуске последовательность будет новой Random rnd = new Random(1L); rnd.nextInt(100); – вернет случайное число от 0 до 100 При каждом запуске последовательность будет прежней Math.random(); – вернет случайное число типа double от 0 до 1 При каждом запуске последовательность будет новой
  • 5.
  • 6. public class Context { private Map<Class<?>, Object> context = new HashMap<Class<?>, Object>(); public void add(Class<?> clazz, Object object){ if(!object.getClass().equals(clazz)){ //ERROR } if(context.containsKey(clazz)){ //ERROR } context.put(clazz, object); } public Object get(Class<?> clazz){ return context.get(clazz); } }
  • 7.
  • 8.
  • 9. public interface MyEventListener { public void handle(EventObject event); } public class MyEventListenerImpl implements MyEventListener { //code public void handle(EventObject event){ //process event } }
  • 10. public class MyEventSource { private List<MyEventListener> listeners = Collections.synchronizedList(new ArrayList<MyEventListener>()); public void addListener(MyEventListener listener){ listeners.add(listener); } public void removeListener(MyEventListener listener){ listeners.remove(listener); } public void fireEvent(){ EventObject event = new EventObject(this); for(MyEventListener listner : listeners){ listner.handle(event); } } }
  • 11. class HelloWorld extends AbstractHandler – из примера jetty public void handle(...) это callback
  • 12.
  • 13.
  • 14.
  • 15. public class TimeHelper { public static long getTimeInMs(){ Date date = new Date(); return date.getTime(); //return System.currentTimeMillis(); } public static int getPOSIX(){ Date date = new Date(); int millisInSecond = 1000; return (int)(date.getTime() / millisInSecond); } public static String getUserDateFull(Locale locale){ Date date = new Date(); DateFormat dateFormatter = DateFormat. getDateInstance(DateFormat.FULL, locale); return dateFormatter.format(date); } }
  • 16.
  • 17. int timeMs = 10000; TimeService.instance().start(); TimeService.instance().sheduleTask(new TimerTask(){ public void run() { System.out.append("Timer run!n"); TimeService.instance().stop(); } }, timeMs);
  • 18.
  • 19.
  • 20. public abstract class InputStream
  • 21.
  • 22. public class FilterInputStream extends InputStream
  • 23.
  • 24.
  • 25. public class SimpleFileReader { public static void main(String args[]) throws IOException { FileReader fr = new FileReader("SimpleFileReader.java"); BufferedReader br = new BufferedReader(fr); String currentLine; while((currentLine = br.readLine()) != null) { System.out.println(currentLine); } fr.close(); } }
  • 26. public class CustomFileReader { public static void main(String args[]) throws IOException { FileInputStream fstream = new FileInputStream("textfile.txt"); DataInputStream in = new DataInputStream(fstream); InputStreamReader isr = new InputStreamReader(in, "UTF-16"); BufferedReader br = new BufferedReader(isr); String strLine; while ((strLine = br.readLine()) != null) { System.out.println (strLine); } br.close(); } }
  • 27. BufferedReader br = null; try{ //code br = new BufferedReader(isr); //code } catch (Exception e){ System.err.println("Error: " + e.getMessage()); } finally{ if(br != null){ try { br.close(); } catch (IOException e) { System.err.println("Error: " + e.getMessage()); } } }
  • 28.
  • 29.
  • 30. public interface VFS { boolean isExist(String path); boolean isDirectory(String path); String getAbsolutePath(String file); byte[] getBytes(String file); String getUFT8Text(String file); Iterator<String> getIterator(String startDir); } public class VFSImpl implements VFS { private String root; public VFSImpl(String root){ this.root = root; }
  • 31. private class FileIterator implements Iterator<String>{ private Queue<File> files = new LinkedList<File>(); public FileIterator(String path){ files.add(new File(root + path)); } public boolean hasNext() { return !files.isEmpty(); } public String next() { File file = files.peek(); if(file.isDirectory()){ for(File subFile : file.listFiles()){ files.add(subFile); } } return files.poll().getAbsolutePath(); } public void remove() { } }