Программирование на Java

       

Создать выходной поток FileOutputStream outFile


byte[] bytesToWrite = {1, 2, 3}; byte[] bytesReaded = new byte[10]; String fileName = "d:\\test.txt"; try { // Создать выходной поток FileOutputStream outFile = new FileOutputStream(fileName); System.out.println("Файл открыт для записи");

// Записать массив outFile.write(bytesToWrite); System.out.println("Записано: " + bytesToWrite.length + " байт");

// По окончании использования должен быть закрыт outFile.close(); System.out.println("Выходной поток закрыт");

// Создать входной поток FileInputStream inFile = new FileInputStream(fileName); System.out.println("Файл открыт для чтения");

// Узнать, сколько байт готово к считыванию int bytesAvailable = inFile.available(); System.out.println("Готово к считыванию: " + bytesAvailable + " байт");

// Считать в массив int count = inFile.read(bytesReaded,0,bytesAvailable); System.out.println("Считано: " + count + " байт"); for (i=0;i<count;i++) System.out.print(bytesReaded[i]+","); System.out.println(); inFile.close(); System.out.println("Входной поток закрыт"); } catch (FileNotFoundException e) { System.out.println("Невозможно произвести запись в файл: " + fileName); } catch (IOException e) { System.out.println("Ошибка ввода/вывода: " + e.toString()); }
Пример 15.1.
Закрыть окно


Файл открыт для записи Записано: 3 байт Выходной поток закрыт Файл открыт для чтения Готово к считыванию: 3 байт Считано: 3 байт 1,2,3, Входной поток закрыт
Пример 15.2.
Закрыть окно


try { int countRead = 0; byte[] toRead = new byte[100]; PipedInputStream pipeIn = new PipedInputStream(); PipedOutputStream pipeOut = new PipedOutputStream(pipeIn);

// Считывать в массив, пока он полностью не будет заполнен while(countRead<toRead.length) {



// Записать в поток некоторое количество байт for(int i=0; i<(Math.random()*10); i++) { pipeOut.write((byte)(Math.random()*127)); }

// Считать из потока доступные данные, // добавить их к уже считанным. int willRead = pipeIn.available(); if(willRead+countRead>toRead.length)

//Нужно считать только до предела массива willRead = toRead.length-countRead; countRead += pipeIn.read(toRead, countRead, willRead); } } catch (IOException e) { System.out.println ("Impossible IOException occur: "); e.printStackTrace(); }
Пример 15.3.
Закрыть окно


// inStream - объект класса PipedInputStream try { while(true) { byte[] readedBytes = null; synchronized(inStream) { int bytesAvailable = inStream.available(); readedBytes = new byte[bytesAvailable]; inStream.read(readedBytes); } // обработка полученных данных из readedBytes // … } catch(IOException e) {

/* IOException будет брошено, когда поток inStream, либо связанный с ним PipedOutputStream, уже закрыт, и при этом производится попытка считывания из inStream */

System.out.println("работа с потоком inStream завершена"); }
Пример 15.4.
Закрыть окно


FileInputStream inFile1 = null; FileInputStream inFile2 = null; SequenceInputStream sequenceStream = null; FileOutputStream outFile = null; try { inFile1 = new FileInputStream("file1.txt"); inFile2 = new FileInputStream("file2.txt"); sequenceStream = new SequenceInputStream(inFile1, inFile2); outFile = new FileOutputStream("file3.txt"); int readedByte = sequenceStream.read(); while(readedByte!=-1){ outFile.write(readedByte); readedByte = sequenceStream.read(); } } catch (IOException e) { System.out.println("IOException: " + e.toString()); } finally { try{sequenceStream.close();}catch(IOException e){}; try{outFile.close();}catch(IOException e){}; }
Пример 15.5.
Закрыть окно


Vector vector = new Vector(); vector.add(new StringBufferInputStream("Begin file1\n")); vector.add(new FileInputStream("file1.txt")); vector.add(new StringBufferInputStream("\ nEnd of file1, begin file2\n")); vector.add(new FileInputStream("file2.txt")); vector.add(new StringBufferInputStream("\nEnd of file2")); Enumeration enum = vector.elements(); sequenceStream = new SequenceInputStream(enum);
Пример 15.6.
Закрыть окно


try { String fileName = "d:\\file1"; InputStream inStream = null; OutputStream outStream = null;

//Записать в файл некоторое количество байт long timeStart = System.currentTimeMillis(); outStream = new FileOutputStream(fileName); outStream = new BufferedOutputStream(outStream); for(int i=1000000; --i>=0;) { outStream.write(i); } long time = System.currentTimeMillis() - timeStart; System.out.println("Writing time: " + time + " millisec"); outStream.close();

// Определить время считывания без буферизации timeStart = System.currentTimeMillis(); inStream = new FileInputStream(fileName); while(inStream.read()!=-1){ } time = System.currentTimeMillis() - timeStart; inStream.close(); System.out.println("Direct read time: " + (time) + " millisec");

// Теперь применим буферизацию timeStart = System.currentTimeMillis(); inStream = new FileInputStream(fileName); inStream = new BufferedInputStream(inStream); while(inStream.read()!=-1){ } time = System.currentTimeMillis() - timeStart; inStream.close(); System.out.println("Buffered read time: " + (time) + " millisec"); } catch (IOException e) { System.out.println("IOException: " + e.toString()); e.printStackTrace(); }
Пример 15.7.
Закрыть окно


Writing time: 359 millisec Direct read time: 6546 millisec Buffered read time: 250 millisec
Пример 15.8.
Закрыть окно


try { ByteArrayOutputStream out = new ByteArrayOutputStream(); DataOutputStream outData = new DataOutputStream(out); outData.writeByte(128); // этот метод принимает аргумент int, но записывает // лишь младший байт outData.writeInt(128); outData.writeLong(128); outData.writeDouble(128); outData.close(); byte[] bytes = out.toByteArray(); InputStream in = new ByteArrayInputStream(bytes); DataInputStream inData = new DataInputStream(in); System.out.println("Чтение в правильной последовательности: "); System.out.println("readByte: " + inData.readByte()); System.out.println("readInt: " + inData.readInt()); System.out.println("readLong: " + inData.readLong()); System.out.println("readDouble: " + inData.readDouble()); inData.close(); System.out.println("Чтение в измененной последовательности:"); in = new ByteArrayInputStream(bytes); inData = new DataInputStream(in); System.out.println("readInt: " + inData.readInt()); System.out.println("readDouble: " + inData.readDouble()); System.out.println("readLong: " + inData.readLong()); inData.close(); } catch (Exception e) { System.out.println("Impossible IOException occurs: " + e.toString()); e.printStackTrace(); }
Пример 15.9.
Закрыть окно


// Родительский класс, не реализующий Serializable public class Parent { public String firstName; private String lastName; public Parent(){ System.out.println("Create Parent"); firstName="old_first"; lastName="old_last"; } public void changeNames() { firstName="new_first"; lastName="new_last"; } public String toString() { return super.toString()+",first="+firstName+",last="+lastName; } } // Класс Child, впервые реализовавший Serializable public class Child extends Parent implements Serializable { private int age; public Child(int age) { System.out.println("Create Child"); this.age=age; } public String toString() { return super.toString()+",age="+age; } } // Наследник Serializable-класса public class Child2 extends Child { private int size; public Child2(int age, int size) { super(age); System.out.println("Create Child2"); this.size=size; } public String toString() { return super.toString()+",size="+size; } } // Запускаемый класс для теста public class Test { public static void main(String[] arg) { try { FileOutputStream fos=new FileOutputStream("output.bin"); ObjectOutputStream oos=new ObjectOutputStream(fos); Child c=new Child(2); c.changeNames(); System.out.println(c); oos.writeObject(c); oos.writeObject(new Child2(3, 4)); oos.close(); System.out.println("Read objects:"); FileInputStream fis=new FileInputStream("output.bin"); ObjectInputStream ois=new ObjectInputStream(fis); System.out.println(ois.readObject()); System.out.println(ois.readObject()); ois.close(); } catch (Exception e) { // упрощенная обработка для краткости e.printStackTrace(); } } }
Пример 15.10.
Закрыть окно


Create Parent Create Child Child@ad3ba4,first=new_first,last=new_last,age= 2 Create Parent Create Child Create Child2 Read objects: Create Parent Child@723d7c,first=old_first,last=old_last,age=2 Create Parent Child2@22c95b,first=old_first,last=old_last,age=3,size=4
Пример 15.11.
Закрыть окно


import java.io.*; class Point implements Serializable { double x; double y; public Point(double x, double y) { this.x = x; this.y = y; } public String toString() { return "("+x+","+y+") reference="+super.toString(); } } class Line implements Serializable { Point point1; Point point2; int index; public Line() { System.out.println("Constructing empty line"); } Line(Point p1, Point p2, int index) { System.out.println("Constructing line: " + index); this.point1 = p1; this.point2 = p2; this.index = index; } public int getIndex() { return index; } public void setIndex(int newIndex) { index = newIndex; } public void printInfo() { System.out.println("Line: " + index); System.out.println(" Object reference: " + super.toString()); System.out.println(" from point "+point1); System.out.println(" to point "+point2); } } public class Main { public static void main(java.lang.String[] args) { Point p1 = new Point(1.0,1.0); Point p2 = new Point(2.0,2.0); Point p3 = new Point(3.0,3.0); Line line1 = new Line(p1,p2,1); Line line2 = new Line(p2,p3,2); System.out.println("line 1 = " + line1); System.out.println("line 2 = " + line2); String fileName = "d:\\file"; try{ // записываем объекты в файл FileOutputStream os = new FileOutputStream(fileName); ObjectOutputStream oos = new ObjectOutputStream(os); oos.writeObject(line1); oos.writeObject(line2); // меняем состояние line1 и записываем его еще раз line1.setIndex(3); //oos.reset(); oos.writeObject(line1); // закрываем потоки // достаточно закрыть только поток-надстройку oos.close(); // считываем объекты System.out.println("Read objects:"); FileInputStream is = new FileInputStream(fileName); ObjectInputStream ois = new ObjectInputStream(is); for (int i=0; i<3; i++) { // Считываем 3 объекта Line line = (Line)ois.readObject(); line.printInfo(); } ois.close(); } catch(ClassNotFoundException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } } }
Пример 15.12.
Закрыть окно


Constructing line: 1 Constructing line: 2 line 1 = Line@7d39 line 2 = Line@ 4ec Read objects: Line: 1 Object reference: Line@331e from point (1.0,1.0) reference=Point@36bb to point (2.0,2.0) reference=Point@386e Line: 2 Object reference: Line@6706 from point (2.0,2.0) reference=Point@386e to point (3.0,3.0) reference=Point@68ae Line: 1 Object reference: Line@331e from point (1.0,1.0) reference=Point@36bb to point (2.0,2.0) reference=Point@386e
Пример 15.13.
Закрыть окно


Constructing line: 1 Constructing line: 2 line 1 = Line@ea2dfe line 2 = Line@ 7182c1 Read objects: Line: 1 Object reference: Line@a981ca from point (1.0,1.0) reference=Point@1503a3 to point (2.0,2.0) reference=Point@a1c887 Line: 2 Object reference: Line@743399 from point (2.0,2.0) reference=Point@a1c887 to point (3.0,3.0) reference=Point@e7b241 Line: 3 Object reference: Line@67d940 from point (1.0,1.0) reference=Point@e83912 to point (2.0,2.0) reference=Point@fae3c6
Пример 15.14.
Закрыть окно


String fileName = "d:\\file.txt";

//Строка, которая будет записана в файл String data = " Some data to be written and read.\n"; try{ FileWriter fw = new FileWriter(fileName); BufferedWriter bw = new BufferedWriter(fw); System.out.println("Write some data to file: " + fileName);

// Несколько раз записать строку for(int i=(int)(Math.random()*10);--i>=0;) bw.write(data); bw.close();

// Считываем результат FileReader fr = new FileReader(fileName); BufferedReader br = new BufferedReader(fr); String s = null; int count = 0; System.out.println("Read data from file: " + fileName);

// Считывать данные, отображая на экран while((s=br.readLine())!=null) System.out.println("row " + ++count + " read:" + s); br.close(); } catch(Exception e) { e.printStackTrace(); }
Пример 15.15.
Закрыть окно


import java.io.*; public class FileDemo { public static void findFiles( File file, FileFilter filter, PrintStream output) throws IOException{ if (file.isDirectory()) { File[] list = file.listFiles(); for (int i=list.length; --i>=0;) { findFiles(list[i], filter, output); } } else { if (filter.accept(file)) output.println("\t" + file.getCanonicalPath()); } } public static void main(String[] args) { class NameFilter implements FileFilter { private String mask; NameFilter(String mask) { this.mask = mask; } public boolean accept(File file){ return (file.getName().indexOf(mask)!=-1)?true:false; } } File pathFile = new File("."); String filterString = ".java"; try { FileFilter filter = new NameFilter(filterString); findFiles(pathFile, filter, System.out); } catch(Exception e) { e.printStackTrace(); } System.out.println("work finished"); } }
Пример 15.16.
Закрыть окно

Содержание раздела