Электронный магазин на Java и XML

       

Класс XMLWriter


Класс XMLWriter — это служебный класс, используемый для записи выходных данных в формате XML. Этот класс записывает данные в выходной поток Output - Stream, который задается конструктором. OutputStream является полем объекта класса XMLWriter. Данный класс также вставляет требуемые разделители строк. В различных операционных системах требуются различные разделители. Например, в Windows применяются символы возврата каретки и перевода строки, а в Unix — только перевода строки. Вам нужен какой-нибудь способ определения, какой их этих разделителей использовать. К счастью, в Java предусмотрено свойство System, которое указывает, какой разделитель применяется в данной операционной системе. В классе XMLWriter определен статический байтовый массив, содержащий это значение.

Класс XMLWriter также отвечает за структурирование отступов в тексте с выходными данными. Определяется байтовый массив, содержащий строку, которая задает расположение отступов. Также вам необходима булева переменная (поле), которая отслеживает, пишем ли мы в данный момент новую строку или продолжаем текущую строку. Начало класса с описанными полями представлено в листинге 6.8.

Листинг 6.8. Начало кода для класса XMLWriter (XMLWriter.java)

package com.XmlEcomBook.Chap06;

import java.io.*;

public class XMLWriter {

static private final byte[] LINE_SEPARATOR = System.getProperty( "line.separator" ).getBytes(); static private final byte[] INDENT = " ".getBytes();

private OutputStream out; private int currentIndent; private boolean newLine = true;

Конструктору XMLWriter в качестве аргумента передается объект OutputStream, в который будут записаны данные. Передавая этот объект, мы можем направить выходной поток XMLWriter в файл, в стандартное устройство вывода или в ответ HTTP. При отладке приложения это свойство очень удобно. Конструктор показан в листинге 6.9.

Листинг 6.9. Конструктор XMLWriter (XMLWriter.java)

public XMLWriter( OutputStream newOut ) { out = newOut; }

Вам необходимо иметь возможность регулировки размера отступа в тексте с выходными данными. Это делается с помощью двух простых методов — один уменьшает размер отступа, а другой увеличивает его. Эти два метода показаны в листинге 6.10.




Листинг 6.10. Регулировка размера отступа (XMLWriter.java)

public void indent() { currentIndent++; }

public void unindent() { currentIndent--; }

Наконец, необходимо осуществить фактическую запись выходных данных. Для этого имеются два метода — в одном после записи выходных данных располагается разделитель строки, а в другом эти данные просто добавляются в конец текущей строки. Эти два метода называются write и write! п. Они аналогичны методам print и println пакета java.io.PrintStream. Когда вы записываете выходные данные, всегда нужно проверять, записываются они в новую строку или нет. Если данные записываются в новую строку, нужно сделать отступ требуемого размера. Метод write! n просто повторяет метод write, а затем размещает символ разделителя строк. Эти методы приведены в листинге 6.11.





Листинг 6.11. Запись выходных данных (XMLWriter.java)

public void write( String s ) throws IOException { if( newLine ) { for( int i = 0; i < currentIndent; i++ ) { out.write( INDENT ); } } out.write( s.getBytes() ); newLine = false; }

public void writeln( String s ) throws IOException { write( s ); out.write( LINE_SEPARATOR ); newLine = true; } }






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