Skip to main content

Manipulação de dados do arquivo

Foi criada biblioteca de manipulação de dados do arquivo no VSet Chameleon com intuido de abstrair a sua complexidade de manipular os dados do arquivo, aumentar a produtividade do desenvolvimento e padronização do processo como todo.

Classe FileWrapper

Tem dois modos de manipulação de arquivo: leitura e gravação. O registro é lido ou gravado na forma posicional de acordo com a estrutura de dados do registro. O tamanho do campo varia de acordo com o tipo de arquivo: para o arquivo tipo binário, o tamanho será de acordo com o tipo do campo; para arquivo tipo texto, o tamanho será de acordo com especificação da propriedade de tamanho (size) do campo.

Anotações

Estrutura de registro

AnotaçãoDescriçãoParâmetro
@FileFieldTypeDescreve as propriedades do registroname - nome do registro
position - Posição do campo que é responsável pelo tipo de registro(1)
size - tamanho do campo que é responsável pelo tipo de registro
value - É o valor do tipo de registro
defaultRecord - Informa se é o registro default, ou seja, dominante do arquivo.


(1) Quando o arquivo tem mais de uma estrutura de registro diferente, para diferenciar qual é o tipo de registro que está lendo ou gravando, a propriedade posição informa qual é a posição, size informa o tamanho e value o valor. Com essas informações a classe
FileWrapper
irá fazer parser caso modo seja leitura ou gravar se o modo seja gravação.

Exemplo

    @FileFieldType(name="carta_tp_reg", position=1, size=2, value="00", defaultRecord=false)
private CARTA_REG_00 header = new CARTA_REG_00();
@FileFieldType(name="carta_tp_reg", position=1, size=2, value="10", defaultRecord=true)
private CARTA_REG_10 detail10 = new CARTA_REG_10();

Estrutura de dados

AnotaçãoDescriçãoParâmetro
@FileFieldDescreve as propriedades do camposize - tamanho do campo que é responsável pelo tipo de registro
decimal - casa decimal(1)
mask - máscara do campo(2)


(1) Se o tipo de campo for double ou float, deverá informar a quantidade de casas decimais que tem no campo. A propriedade size é o tamanho total incluindo o tamanho da casa decimal.

Exemplo:

@FileField(size=11, decimal=2)
private double carta_10_saldo_dev;

Nota: Equivale 9 dígitos para inteiro e 2 dígitos para decimal.

(2) Máscara é utilizado para campo tipo data e/ou hora. Usar a convenção de data do Java.

Exemplo:

    @FileField(size=8, mask="yyyyMMdd")
private Date carta_00_dt_mvto;

Exemplo:

public class CARTA_REG_00 {

@FileField(size=2)
private int carta_tp_reg;
@FileField(size=3)
private int carta_00_corporate;
@FileField(size=40)
private String carta_00_reserva1;
@FileField(size=30)
private String carta_00_nome;
@FileField(size=8, mask="yyyyMMdd")
private Date carta_00_dt_mvto;
@FileField(size=8)
private int carta_00_dt_proc;
@FileField(size=8)
private int carta_00_hr_proc;
@FileField(size=1)
private String carta_00_processo;

public int getCarta_tp_reg() {
return carta_tp_reg;
}
public void setCarta_tp_reg(int carta_tp_reg) {
this.carta_tp_reg = carta_tp_reg;
}
public int getCarta_00_corporate() {
return carta_00_corporate;
}
public void setCarta_00_corporate(int carta_00_corporate) {
this.carta_00_corporate = carta_00_corporate;
}
public String getCarta_00_reserva1() {
return carta_00_reserva1;
}
public void setCarta_00_reserva1(String carta_00_reserva1) {
this.carta_00_reserva1 = carta_00_reserva1;
}
public String getCarta_00_nome() {
return carta_00_nome;
}
public void setCarta_00_nome(String carta_00_nome) {
this.carta_00_nome = carta_00_nome;
}
public Date getCarta_00_dt_mvto() {
return carta_00_dt_mvto;
}
public void setCarta_00_dt_mvto(Date carta_00_dt_mvto) {
this.carta_00_dt_mvto = carta_00_dt_mvto;
}
public int getCarta_00_dt_proc() {
return carta_00_dt_proc;
}
public void setCarta_00_dt_proc(int carta_00_dt_proc) {
this.carta_00_dt_proc = carta_00_dt_proc;
}
public int getCarta_00_hr_proc() {
return carta_00_hr_proc;
}
public void setCarta_00_hr_proc(int carta_00_hr_proc) {
this.carta_00_hr_proc = carta_00_hr_proc;
}
public String getCarta_00_processo() {
return carta_00_processo;
}
public void setCarta_00_processo(String carta_00_processo) {
this.carta_00_processo = carta_00_processo;
}
}

Classe

Construtor da classe

ConstrutorParâmetro
FileWrapper(String filename, boolean carriageReturn_newline, MODETYPE mode)filename - nome do arquivo
carriageReturn_newline - Informa se tem quebra de linha
mode - Leitura(READER) ou Gravação(WRITER)
FileWrapper(String filename, boolean carriageReturn_newline, MODETYPE mode, boolean extend)filename - nome do arquivo
carriageReturn_newline - Informa se tem quebra de linha
mode - Leitura(READER) ou Gravação(WRITER)
extend - Informa que será estendido a gravação do arquivo
FileWrapper(String filenameWriter, boolean extend, boolean newLine, String filenameReader, boolean carriageReturn)filenameWriter - nome do arquivo de saída
extend - Informa que será estendido a gravação do arquivo
newline - Informa se tem quebra de linha da saída
filenameReader - nome do arquivo de entrada
carriageReturn - Informa se tem quebra de linha da entrada
FileWrapper(byte[] stream, boolean carriageReturn_newline)byte[] stream - dados em stream (Array de bytes)
carriageReturn_newline - Informa se tem quebra de linha

Exemplo

public class CARTA_COBRANCA extends FileWrapper {

@FileFieldType(name="carta_tp_reg", position=1, size=2, value="00", defaultRecord=false)
private CARTA_REG_00 header = new CARTA_REG_00();
@FileFieldType(name="carta_tp_reg", position=1, size=2, value="10", defaultRecord=true)
private CARTA_REG_10 detail10 = new CARTA_REG_10();

public CARTA_COBRANCA(String filename, boolean carriageReturn_newline,
MODETYPE mode) throws Exception {
super(filename, carriageReturn_newline, mode);
}

public CARTA_REG_00 getHeader() {
return header;
}

public CARTA_REG_10 getDetail10() {
return detail10;
}

}

Método da classe

MétodoTipoDescrição
readLine()ObjectLê o registro
write (Object rec)voidGrava o registro – Classe da estrutura de dados do registro
write(String rec)voidGrava o registro – String
getBytes(Object rec)byte[]Retorna o registro em array de byte
close()voidFechar o arquivo
getTypeRecord()StringInforma o tipo de registro
getRecord()StringRetorna os dados do registro em String
getCountRecordsWrite()intInforma a quantidade de registros gravados

Exemplo

  • Leitura
    String filename = afile[i].getName();
CARTA_COBRANCA in = new CARTA_COBRANCA(afile[i].getAbsolutePath(), true, MODETYPE.READER);
// O arquivo tem dois tipos de registro CARTA_REG_00 e CARTA_REG_10
while (in.readLine() != null) {
if (in.getTypeRecord().equalsIgnoreCase("00")) {
ap.setDataHeader(in.getHeader().getCarta_00_dt_mvto());
ap.setNomeArquivo(in.getFilename());
apDAO.insert();
idArquivo = apDAO.getIdAutoIncrem();
}
else if (in.getTypeRecord().equalsIgnoreCase("10")) {
sequencial++;
breg.setChaveApresentadora(in.getDetail10().getCarta_10_nosso_numero());
breg.setSeuNumero(in.getDetail10().getCarta_10_nosso_numero());
}
}

  • Gravação
    String filename = afile[i].getName();
String pathTemp = Global.arquivoConfig.getPathCartaCobrancaEntrada() + File.separator + "temp";
CARTA_COBRANCA out = new CARTA_COBRANCA(pathTemp + File.separator + filename, true, MODETYPE.WRITER);
while (in.readLine() != null) {
if (in.getTypeRecord().equalsIgnoreCase("00")) {
out.write(in.getRecord());
}
else if (in.getTypeRecord().equalsIgnoreCase("10")) {
out.write(in.getDetail10());
}
}

Classe FileDelimiterWrapper

Tem dois modos de manipulação de arquivo: leitura e gravação. O registro é lido ou gravado na forma de um delimitador de acordo com a estrutura de dados do registro.

Anotações

Estrutura de registro

AnotaçãoDescriçãoParâmetro
@FileFieldTypeDescreve as propriedades do registroname - nome do registro
position - Posição do campo que é responsável pelo tipo de registro(1)
size - tamanho do campo que é responsável pelo tipo de registro
value - É o valor do tipo de registro
defaultRecord - Informa se é o registro default, ou seja, dominante do arquivo.

(1) Quando o arquivo tem mais de uma estrutura de registro diferente, para diferenciar qual é o tipo de registro que está lendo ou gravando, a propriedade posição informa qual é a posição, size informa o tamanho e value o valor. Com essas informações a classe
FileWrapper
irá fazer parser caso modo seja leitura ou gravar se o modo seja gravação.

Exemplo

    @FileFieldType(name="seq", position=1, size=0, value="", defaultRecord=true)
private CountryFileDetail detail = new CountryFileDetail();

Classe

Construtor da classe

ConstrutorParâmetro
FileDelimiterWrapper(String filename, boolean carriageReturn_newline, MODETYPE mode, String delimiter)filename - nome do arquivo
carriageReturn_newline - Informa se tem quebra de linha
mode - Leitura(READER) ou Gravação(WRITER)
delimiter - símbolo do delimitador
FileDelimiterWrapper(String filename, boolean carriageReturn_newline, MODETYPE mode, String delimiter, String charsetName)filename - nome do arquivo
carriageReturn_newline - Informa se tem quebra de linha
mode - Leitura(READER) ou Gravação(WRITER)
delimiter - símbolo do delimitador
charsetName - Tipo de charset (UTF-8, ISO-8859-1,...)
FileDelimiterWrapper(String filename, boolean carriageReturn_newline, MODETYPE mode, String delimiter, boolean extend)filename - nome do arquivo
carriageReturn_newline - Informa se tem quebra de linha
mode - Leitura(READER) ou Gravação(WRITER)
delimiter - símbolo do delimitador
extend - Informa que será estendido a gravação do arquivo
FileDelimiterWrapper(String filenameWriter, boolean newLine, String filenameReader, boolean carriageReturn, String delimiter, boolean extend)filenameWriter - nome do arquivo de saída newline - Informa se tem quebra de linha da saída
filenameReader - nome do arquivo de entrada
carriageReturn - Informa se tem quebra de linha da entrada
delimiter - símbolo do delimitador
extend - Informa que será estendido a gravação do arquivo
FileDelimiterWrapper(byte[] stream, boolean carriageReturn_newline, String delimiter)byte[] stream - dados em stream (Array de bytes)
carriageReturn_newline - Informa se tem quebra de linha
delimiter - símbolo do delimitador

Exemplo

public class CountryFile extends FileDelimiterWrapper {

@FileFieldType(name="seq", position=1, size=0, value="", defaultRecord=true)
private CountryFileDetail detail = new CountryFileDetail();


public CountryFile(String filename,
boolean carriageReturn_newline, MODETYPE mode, String delimiter) throws Exception {
super(filename, carriageReturn_newline, mode, delimiter);
}

public CountryFileDetail getDetail() {
return detail;
}
}

Método da classe

MétodoTipoDescrição
readLine()ObjectLê o registro
write(Object rec)voidGrava o registro – Classe da estrutura de dados do registro
write(String rec)voidGrava o registro – String
close()voidFechar o arquivo
getTypeRecord()StringInforma o tipo de registro
getRecord()StringRetorna os dados do registro em String
getCountRecordsWrite()intInforma a quantidade de registros gravados

Exemplo

  • Leitura
        CountryFile file = new CountryFile("C:/file/digitalbank/paises.csv", true, MODETYPE.READER, ",");
CountryFileDetail detail = file.getDetail();
CountryDAO countryDAO = new CountryDAO();
Country country = countryDAO.getInput();
Timestamp now = new Timestamp(System.currentTimeMillis());
int count = 0;
file.setEmbedDelimiter("\"", "");
file.setCharsetName("UTF-8");
while (file.readLine() != null) {
count++;
System.out.println("***** " + count + " -- " + detail.getName() + " -- " + new String(detail.getName().getBytes(), "UTF-8") + " - " + detail.getCode());
countryDAO.moveCorr(detail, country, false);
country.setName(new String(detail.getName().getBytes(), "UTF-8"));
countryDAO.insert();
}
file.close();
  • Gravação
        GlobalHubMergeFile merge = new GlobalHubMergeFile("C:/file/hub/neo/globalHubMerge.csv", true, MODETYPE.WRITER, ";", "UTF-8");
GlobalHubMergeFileDetail dMerge = merge.getDetail();
while (file.readLine() != null) {
count++;
dMerge.setCnpj(detail.getCnpj());
dMerge.setCodigoAutorizacao(detail.getCodigoAutorizacao());
dMerge.setDataHora(detail.getDataHora());
dMerge.setDcc(detail.getDcc());
dMerge.setModoCaptura(detail.getModoCaptura());
dMerge.setMoeda(detail.getMoeda());
dMerge.setNomePortador("");
dMerge.setNumeroCartao(detail.getNumeroCartao());
dMerge.setOrder(detail.getOrder());
dMerge.setPais(detail.getPais());
dMerge.setParcelas(detail.getParcelas());
dMerge.setProduto(detail.getProduto());
dMerge.setStatus(detail.getStatus());
dMerge.setTecnologia(detail.getTecnologia());
dMerge.setTerminal(detail.getTerminal());
dMerge.setValor(detail.getValor());
merge.write(dMerge);
}
System.out.println("TOTAL:::: " + count + " **** " + found + " **** " + valido + " **** " + (System.currentTimeMillis() - init));
file.close();
merge.close();