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ção | Descrição | Parâmetro |
|---|---|---|
@FileFieldType | Descreve as propriedades do registro | name - 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. |
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ção | Descrição | Parâmetro |
|---|---|---|
@FileField | Descreve as propriedades do campo | size - 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;
(2) Máscara é utilizado para campo tipo data e/ou hora. Usar a convenção de data do Java.Nota: Equivale 9 dígitos para inteiro e 2 dígitos para decimal.
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
| Construtor | Parâ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étodo | Tipo | Descrição | |
|---|---|---|---|
readLine() | Object | Lê o registro | |
write (Object rec) | void | Grava o registro – Classe da estrutura de dados do registro | |
write(String rec) | void | Grava o registro – String | |
getBytes(Object rec) | byte[] | Retorna o registro em array de byte | |
close() | void | Fechar o arquivo | |
getTypeRecord() | String | Informa o tipo de registro | |
getRecord() | String | Retorna os dados do registro em String | |
getCountRecordsWrite() | int | Informa 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ção | Descrição | Parâmetro |
|---|---|---|
@FileFieldType | Descreve as propriedades do registro | name - 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. |
Exemplo
@FileFieldType(name="seq", position=1, size=0, value="", defaultRecord=true)
private CountryFileDetail detail = new CountryFileDetail();
Classe
Construtor da classe
| Construtor | Parâ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étodo | Tipo | Descrição | |
|---|---|---|---|
readLine() | Object | Lê o registro | |
write(Object rec) | void | Grava o registro – Classe da estrutura de dados do registro | |
write(String rec) | void | Grava o registro – String | |
close() | void | Fechar o arquivo | |
getTypeRecord() | String | Informa o tipo de registro | |
getRecord() | String | Retorna os dados do registro em String | |
getCountRecordsWrite() | int | Informa 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();