Escrevendo arquivo texto

1 resposta
robinsonbsilva

Boas…
Pessoal, meu problema é o seguinte:
Eu estou gerando um arquivo texto(para cobrança AMEX), este é preenchido com as informações que vêm do banco seguindo o layout passado por essa operadora!!Até aqui beleza.
O que ocorre é que após eu ter feito esse processo e fechado o arquivo, há a necessidade de eu abri-lo novamente e inserir mais informações!!
A caca, ocorre nesse processo de reabertura, pois ele gera o nome do arquivo errado. Exemplo:

1ª vez: Criação do arquivo (Ok…cria corretamente, com o NOME.rem)
2ª vez: Edição do arquivo NOME.rem (Problemas…ele cria um novo arquivo, com o NOME.rem.rem)
Quando o correto seria ter apenas um único arquivo Nome.rem, com todas a informações.

FONTE USADO:

public void criaLayout() throws DebitoException {
    
    try {
        
        String tmp = "";
        String sql="";
        
        if(primeiraFilial){
            sql = "SELECT paulista.arquivo_amexID.nextVal FROM dual";
            int n = ConnectionPool.getFirstInt(sql);
            tmp = IntUtil.toString(n);
            tmp = DebitoUtil.colocaZeros(3 - tmp.length()) + tmp;
        }
        else{
            sql = "SELECT MAX(nome_arquivo) FROM paulista.arquivo_amex";
            tmp = ConnectionPool.getFirstString(sql);
        }
        
        double total = 0.0;
        SimpleDateFormat data = new SimpleDateFormat("dd-MM-yy_HH.mm");
        PrintStream layout = null;
        String aux="";
        
        try{
            
            BufferedReader buffer = null;
            buffer = new BufferedReader(new FileReader(Bio.getAmexDir() + System.getProperty("file.separator") + "amx" + tmp));
            
            if(buffer.ready()){
                
                while (buffer.ready()){
                    if(aux.equals("")){
                        aux = buffer.readLine();
                    }
                    else{
                        aux = aux  + ":" + buffer.readLine();
                    }
                }
                
                buffer.close();
                
                layout = new PrintStream(new FileOutputStream(Bio.getAmexDir() + System.getProperty("file.separator") + "amx" + tmp));
                StringTokenizer st = new StringTokenizer(aux, ":");
                while(st.hasMoreTokens()) {
                    layout.print(st.nextToken());
                    layout.println();
                }
                
            }
            else{
                
                if(tmp.endsWith(".rem")){
                    layout = new PrintStream(new FileOutputStream(Bio.getAmexDir() + System.getProperty("file.separator") + "amx" + tmp));
                }
                else{
                    layout = new PrintStream(new FileOutputStream(Bio.getAmexDir() + System.getProperty("file.separator") + "amx" + tmp + ".rem"));
                }
                
            }
            
        }
        catch(FileNotFoundException io){

                if(tmp.endsWith(".rem")){
                    layout = new PrintStream(new FileOutputStream(Bio.getAmexDir() + System.getProperty("file.separator") + "amx" + tmp));
                }
                else{
                    layout = new PrintStream(new FileOutputStream(Bio.getAmexDir() + System.getProperty("file.separator") + "amx" + tmp + ".rem"));
                }                
        }

}

segue só uma parte do código!!

Agradeço desde já.

1 Resposta

andre_a_s

Dá uma olhada na API do FileWriter
Tem um construtor que define com um boolean se vai sobrescrever ou apenas dar um append no arquivo :wink:

Criado 18 de janeiro de 2005
Ultima resposta 18 de jan. de 2005
Respostas 1
Participantes 2