/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.operation.imports; import java.io.IOException; import java.io.Reader; import org.apache.log4j.Logger; /** * Classe specifique a l'import permettant de lire des fichier de taille fixe. * * <p> * <b>Attention</b> : La methode <code>getLine</code> retourne une "ligne" de la taille * specifiee dans le constructeur. * </p> * * @author $Author: spinae $ * @version $Revision: 1.2 $ */ final class FixedReader extends java.io.BufferedReader { private char[] line; private int lineNumber = 0; private int lineSize; // Log private static final Logger APP = Logger.getLogger(FixedReader.class); /** * Constructor for the FixedReader object * * @param reader Description of Parameter * @param lineSize Description of Parameter */ public FixedReader(Reader reader, int lineSize) { super(reader); setLineSize(lineSize); } /** * Gets the LineSize attribute of the FixedReader object * * @return The LineSize value */ public final int getLineSize() { return lineSize; } /** * Positionne la taille d'une ligne. * * @param newLineSize The new LineSize value */ public final void setLineSize(int newLineSize) { lineSize = newLineSize; line = new char[lineSize]; } /** * Retourne une ligne de taille fixe. * * <p> * La ligne retourne est de taille fixe. * </p> * * @return une "ligne" du fichier. * * @exception java.io.IOException si IO exception + si ligne incomplete (taille ligne * != de celle indique) * @throws IOException TODO */ public String readLine() throws java.io.IOException { int size = read(line, 0, lineSize); if (size < 0) { return null; } lineNumber++; if (size != lineSize) { // Log.USER.error("Ligne trops courte >" + new String(line) + "<"); // Log.APP.error("Ligne trops courte " + size + " char, au lieu de " + lineSize); APP.error("Ligne trops courte >" + new String(line) + "<"); throw new IOException("Ligne " + lineNumber + " du fichier trops courte (" + size + " charact�res au lieu de " + lineSize + ")"); } return new String(line); } }